Thank you!
Ecore_Con_Url already have the solution with _ecore_con_url_idler_handler.
So I just break the while loop if it takes too long.
==================================================================
--- src/lib/ecore_con/ecore_con_url.c (revision 63520)
+++ src/lib/ecore_con/ecore_con_url.c (working copy)
@@ -1357,15 +1357,21 @@
int fd_max, fd;
int flags, still_running;
int completed_immediately = 0;
+ double start;
CURLMcode ret;
_url_con_list = eina_list_append(_url_con_list, url_con);
url_con->active = EINA_TRUE;
curl_multi_add_handle(_curlm, url_con->curl_easy);
- /* This one can't be stopped, or the download never start. */
- while (curl_multi_perform(_curlm, &still_running) ==
CURLM_CALL_MULTI_PERFORM) ;
+ start = ecore_time_get();
+ while (curl_multi_perform(_curlm, &still_running) ==
CURLM_CALL_MULTI_PERFORM)
+ if ((ecore_time_get() - start) > ecore_animator_frametime_get())
+ {
+ break;
+ }
+
completed_immediately = _ecore_con_url_process_completed_jobs(url_con);
if (!completed_immediately)
It works well for me.
How about this code?
Please review again.
Thank you once again.
On Thu, Sep 22, 2011 at 4:46 AM, Cedric BAIL <[email protected]> wrote:
> On Wed, Sep 21, 2011 at 6:18 PM, Kim Yunhan <[email protected]> wrote:
> > Thank you for your advice.
> >
> > libcurl already supports asynchronous DNS lookup (including c-ares).
> > Ecore_Con_Url is integrated with libcurl.
> > But I think that code in below blocks asynchronous mechanism of libcurl.
> > while (curl_multi_perform(_curlm, &still_running)
> > == CURLM_CALL_MULTI_PERFORM) ;
> >
> > I want to fix it simple. :)
>
> Agreed, I didn't look to that code since months or years, but why do
> we have a 'while' here ? shouldn't we just go back to the main loop
> and be magically called again ? did you try that solution ? if that
> work, it would be a much better fix in my opinion.
>
> > On Thu, Sep 22, 2011 at 12:48 AM, Nicolas Aguirre <
> [email protected]
> >> wrote:
> >
> >> 2011/9/21 Kim Yunhan <[email protected]>:
> >> > Hello!
> >> >
> >> > elm_map uses Ecore Con with CURL.
> >> > I tested elm_map many times on my device.
> >> > But sometimes UI interaction is held when data connection is poor.
> >> > So I tried to debug and I found that this code lead to hold an Ecore
> main
> >> > loop.
> >> >
> >> > ----------------------------------------------
> >> > In ecore_con_url.c
> >> >
> >> > while (curl_multi_perform(_curlm, &still_running) ==
> >> > CURLM_CALL_MULTI_PERFORM) ;
> >> > ----------------------------------------------
> >> >
> >> > curl_multi_perform() is CURL's asynchronous API.
> >> > But above code hold an Ecore main loop.
> >> > When it takes long time in libcurl, UI interaction is delayed.
> >> >
> >> > For example, If you have poor data connection.
> >> > libcurl is trying to resolve DNS in this step.
> >> > But it have to wait until timeout.
> >> > At that time it looks like being locked.
> >> >
> >> > So I write a patch for fixing it.
> >> >
> >> > Index: ecore_con_url.c
> >> > ===================================================================
> >> > --- ecore_con_url.c (revision 63518)
> >> > +++ ecore_con_url.c (working copy)
> >> > @@ -1364,7 +1364,10 @@
> >> > url_con->active = EINA_TRUE;
> >> > curl_multi_add_handle(_curlm, url_con->curl_easy);
> >> > /* This one can't be stopped, or the download never start. */
> >> > - while (curl_multi_perform(_curlm, &still_running) ==
> >> > CURLM_CALL_MULTI_PERFORM) ;
> >> > + while (curl_multi_perform(_curlm, &still_running) ==
> >> > CURLM_CALL_MULTI_PERFORM)
> >> > + {
> >> > + ecore_main_loop_iterate();
> >> > + }
> >> >
> >> > completed_immediately =
> >> _ecore_con_url_process_completed_jobs(url_con);
> >> >
> >> > I am not sure that this patch is right because I don't understand
> Ecore
> >> and
> >> > libcurl deeply.
> >> > So I need your help. :)
> >> > Please review this patch.
> >> >
> >> > Best regards,
> >> > Yunhan Kim (spbear)
> >> >
> >> >
> >>
> ------------------------------------------------------------------------------
> >> > All the data continuously generated in your IT infrastructure contains
> a
> >> > definitive record of customers, application performance, security
> >> > threats, fraudulent activity and more. Splunk takes this data and
> makes
> >> > sense of it. Business sense. IT sense. Common sense.
> >> > http://p.sf.net/sfu/splunk-d2dcopy1
> >> > _______________________________________________
> >> > enlightenment-devel mailing list
> >> > [email protected]
> >> > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >> >
> >> >
> >>
> >> There is a c_ares[1] support for asynchronous DNS resolution in
> >> ecore_con iirc. Why not using it ?
> >>
> >> [1] http://c-ares.haxx.se/
> >>
> >> --
> >> Nicolas Aguirre
> >> Mail: [email protected]
> >> Web: http://enna.geexbox.org
> >> Blog: http://dev.enlightenment.fr/~captainigloo/
> >>
> >>
> >>
> ------------------------------------------------------------------------------
> >> All the data continuously generated in your IT infrastructure contains a
> >> definitive record of customers, application performance, security
> >> threats, fraudulent activity and more. Splunk takes this data and makes
> >> sense of it. Business sense. IT sense. Common sense.
> >> http://p.sf.net/sfu/splunk-d2dcopy1
> >> _______________________________________________
> >> enlightenment-devel mailing list
> >> [email protected]
> >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >>
> >
> ------------------------------------------------------------------------------
> > All the data continuously generated in your IT infrastructure contains a
> > definitive record of customers, application performance, security
> > threats, fraudulent activity and more. Splunk takes this data and makes
> > sense of it. Business sense. IT sense. Common sense.
> > http://p.sf.net/sfu/splunk-d2dcopy1
> > _______________________________________________
> > enlightenment-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >
> >
>
>
>
> --
> Cedric BAIL
>
>
> ------------------------------------------------------------------------------
> All the data continuously generated in your IT infrastructure contains a
> definitive record of customers, application performance, security
> threats, fraudulent activity and more. Splunk takes this data and makes
> sense of it. Business sense. IT sense. Common sense.
> http://p.sf.net/sfu/splunk-d2dcopy1
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
Index: src/lib/ecore_con/ecore_con_url.c
===================================================================
--- src/lib/ecore_con/ecore_con_url.c (revision 63520)
+++ src/lib/ecore_con/ecore_con_url.c (working copy)
@@ -1357,15 +1357,21 @@
int fd_max, fd;
int flags, still_running;
int completed_immediately = 0;
+ double start;
CURLMcode ret;
_url_con_list = eina_list_append(_url_con_list, url_con);
url_con->active = EINA_TRUE;
curl_multi_add_handle(_curlm, url_con->curl_easy);
- /* This one can't be stopped, or the download never start. */
- while (curl_multi_perform(_curlm, &still_running) ==
CURLM_CALL_MULTI_PERFORM) ;
+ start = ecore_time_get();
+ while (curl_multi_perform(_curlm, &still_running) ==
CURLM_CALL_MULTI_PERFORM)
+ if ((ecore_time_get() - start) > ecore_animator_frametime_get())
+ {
+ break;
+ }
+
completed_immediately = _ecore_con_url_process_completed_jobs(url_con);
if (!completed_immediately)
------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel