Ok, I found some little mistake in my code so there is 2 more patch to
apply. And I also spotted some bugs in your code so their is also a
patch for them.

On Tue, Mar 4, 2008 at 7:17 PM, Massimiliano Calamelli
<[EMAIL PROTECTED]> wrote:
> Sure, but tomorrow, this evening i'm very busy. To do double checks,
>  can you try my patch? It uses a lot ecore_file_download, around 16
>  simultaneous for static wp, and 34 for animated.
>
>  massimiliano
>
>  2008/3/4, Cedric BAIL <[EMAIL PROTECTED]>:
>
>
> > Could you test this set of patch ?
>  >
>  > On Mon, Mar 3, 2008 at 7:11 PM, Massimiliano Calamelli
>  > <[EMAIL PROTECTED]> wrote:
>  > > I'll be very happy to help you for tests.
>  > >
>  > >  massimiliano
>  >
>  > --
>  > Cedric BAIL
>  >
>
>



-- 
Cedric BAIL
From cc5b4a3ddbf6e05c6a1ec50e8a73453c23d08321 Mon Sep 17 00:00:00 2001
From: Cedric BAIL <[EMAIL PROTECTED]>
Date: Wed, 5 Mar 2008 17:23:51 +0100
Subject: [PATCH] Correctly handle ecore_list destruction.

---
 src/lib/ecore_con/ecore_con_url.c |   19 +++++++++++++++++--
 1 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/lib/ecore_con/ecore_con_url.c b/src/lib/ecore_con/ecore_con_url.c
index cb87ee8..58ecfe7 100644
--- a/src/lib/ecore_con/ecore_con_url.c
+++ b/src/lib/ecore_con/ecore_con_url.c
@@ -169,7 +169,7 @@ ecore_con_url_shutdown(void)
 	if (!ecore_list_empty_is(_url_con_list))
 	  {
 	     Ecore_Con_Url *url_con;
-	     while ((url_con = ecore_list_first_remove(_url_con_list)))
+	     while ((url_con = ecore_list_first(_url_con_list)))
 	       {
 		  ecore_con_url_destroy(url_con);
 	       }
@@ -243,6 +243,15 @@ ecore_con_url_new(const char *url)
 #endif
 }
 
+static int
+_ecore_con_url_compare_cb(const void *data1, const void *data2)
+{
+   const void	*url_con1 = data1;
+   const void	*url_con2 = data2;
+
+   return (url_con1 == url_con2) ? 0 : 1;
+}
+
 /**
  * Frees the Ecore_Con_Url.
  * @return  FIXME: To be documented. 
@@ -268,7 +277,13 @@ ecore_con_url_destroy(Ecore_Con_Url *url_con)
    if (url_con->curl_easy)
      {
 	if (url_con->active)
-	  curl_multi_remove_handle(curlm, url_con->curl_easy);
+	  {
+	     if (ecore_list_find(_url_con_list, _ecore_con_url_compare_cb, url_con) == url_con)
+	       ecore_list_remove(_url_con_list);
+	     url_con->active = 0;
+
+	     curl_multi_remove_handle(curlm, url_con->curl_easy);
+	  }
 	curl_easy_cleanup(url_con->curl_easy);
      }
    curl_slist_free_all(url_con->headers);
-- 
1.5.4.GIT

From 37d0ba61bb57dafd72e1af403eea653dd4e2b6b2 Mon Sep 17 00:00:00 2001
From: Cedric BAIL <[EMAIL PROTECTED]>
Date: Wed, 5 Mar 2008 17:24:54 +0100
Subject: [PATCH] Little fix.

Don't forget to initialise ecore_list.
Set MAGIC stuff correctly.
---
 src/lib/ecore_file/ecore_file_download.c |   19 +++++++++++++++----
 1 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/lib/ecore_file/ecore_file_download.c b/src/lib/ecore_file/ecore_file_download.c
index a3a244a..f8c61a4 100644
--- a/src/lib/ecore_file/ecore_file_download.c
+++ b/src/lib/ecore_file/ecore_file_download.c
@@ -41,19 +41,26 @@ static Ecore_Event_Handler	*_url_complete_handler = NULL;
 static Ecore_Event_Handler	*_url_progress_download = NULL;
 static Ecore_List		*_job_list;
 
-int
+EAPI int
 ecore_file_download_init(void)
 {
+   ecore_con_url_init();
+
    if (init++ == 0)
      {
 	_url_complete_handler = ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE, _ecore_file_download_url_complete_cb, NULL);
 	_url_progress_download = ecore_event_handler_add(ECORE_CON_EVENT_URL_PROGRESS, _ecore_file_download_url_progress_cb, NULL);
      }
+   if (!_job_list)
+     {
+	_job_list = ecore_list_new();
+	if (!_job_list) return 0;
+     }
 
-   return ecore_con_url_init();
+   return 1;
 }
 
-int
+EAPI int
 ecore_file_download_shutdown(void)
 {
    if (--init == 0)
@@ -62,12 +69,14 @@ ecore_file_download_shutdown(void)
 	ecore_event_handler_del(_url_progress_download);
 	_url_complete_handler = NULL;
 	_url_progress_download = NULL;
+
+	ecore_list_destroy(_job_list);
      }
 
    return ecore_con_url_shutdown();
 }
 
-void
+EAPI void
 ecore_file_download_abort_all(void)
 {
    if (!ecore_list_empty_is(_job_list))
@@ -243,6 +252,8 @@ _ecore_file_download_curl(const char *url, const char *dst,
    job = calloc(1, sizeof(Ecore_File_Download_Job));
    if (!job) return NULL;
 
+   ECORE_MAGIC_SET(job, ECORE_MAGIC_FILE_DOWNLOAD_JOB);
+
    job->file = fopen(dst, "wb");
    if (!job->file)
      {
-- 
1.5.4.GIT

From 879e5db2113f3a5fb799163e9a2a8d4037d0a8c7 Mon Sep 17 00:00:00 2001
From: Cedric BAIL <[EMAIL PROTECTED]>
Date: Wed, 5 Mar 2008 17:21:05 +0100
Subject: [PATCH] Fix some little bugs.

Use some MAGIC to only handle correct event.
Fix ecore_file_download_init and shutdown.
Correctly cancel the previous download.
---
 .../conf_wallpaper/e_int_config_wallpaper_web.c    |   27 ++++++++++++++++++-
 1 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/modules/conf_wallpaper/e_int_config_wallpaper_web.c b/src/modules/conf_wallpaper/e_int_config_wallpaper_web.c
index 4238442..a1a6322 100644
--- a/src/modules/conf_wallpaper/e_int_config_wallpaper_web.c
+++ b/src/modules/conf_wallpaper/e_int_config_wallpaper_web.c
@@ -8,12 +8,16 @@
 #include "e_mod_main.h"
 #define D(x)  do {printf("### DBG line %d ### ", __LINE__); printf x; fflush(stdout);} while (0)
 
+#define	MAGIC_IMPORT	0x427781cb
+
 typedef struct _Import Import;
 
 struct _Import {
-   E_Config_Dialog *parent;
+   int			magic;
+
+   E_Config_Dialog	*parent;
    E_Config_Dialog_Data *cfdata;
-   E_Dialog *dia;
+   E_Dialog		*dia;
 };
 
 struct _E_Config_Dialog_Data 
@@ -73,6 +77,8 @@ e_int_config_wallpaper_web (E_Config_Dialog *parent)
    if (!import) 
       return NULL;
 
+   import->magic = MAGIC_IMPORT;
+
    dia = e_dialog_new (parent->con, "E", "_wallpaper_web_dialog");
    if (!dia) 
    {
@@ -89,6 +95,8 @@ e_int_config_wallpaper_web (E_Config_Dialog *parent)
    cfdata = E_NEW (E_Config_Dialog_Data, 1);
 
    ecore_con_url_init ();
+   ecore_file_download_init ();
+
    cfdata->ecu = ecore_con_url_new ("http://fake.url";);
 
    cfdata->ready_for_edj = 0;
@@ -206,6 +214,7 @@ e_int_config_wallpaper_web_del (E_Dialog *dia)
    {
       ecore_event_handler_del (cfdata->hcomplete);
    }
+   ecore_file_download_shutdown();
    ecore_con_url_shutdown ();
 
    if (cfdata->tmpdir)
@@ -233,8 +242,13 @@ _feed_complete (void *data, int type, void *event)
 
    euc = (Ecore_Con_Event_Url_Complete *)event;
    import = data;
+   if (import->magic != MAGIC_IMPORT) return 1;
+
    cfdata = import->cfdata;
+   if (cfdata->ecu != euc->url_con) return 1;
+
    fclose (cfdata->feed);
+   cfdata->feed = NULL;
    ecore_event_handler_del (cfdata->hdata);
    ecore_event_handler_del (cfdata->hcomplete);
    cfdata->hdata = NULL;
@@ -262,7 +276,12 @@ _feed_data (void *data, int type, void *event)
 
    eud = (Ecore_Con_Event_Url_Data *)event;
    import = data;
+   if (import->magic != MAGIC_IMPORT) return 1;
+
    cfdata = import->cfdata;
+
+   if (cfdata->ecu != eud->url_con) return 1;
+
    fwrite (eud->data, sizeof(unsigned char), eud->size, cfdata->feed);
    return 0;
 }
@@ -597,6 +616,10 @@ _get_feed (char *url, void *data)
    cfdata->tmpdir = mkdtemp (strdup (tmpdir_tpl));
 
    ecore_con_url_url_set (cfdata->ecu, url);
+   ecore_file_download_abort_all ();
+   if (cfdata->hdata) ecore_event_handler_del (cfdata->hdata);
+   if (cfdata->hcomplete) ecore_event_handler_del (cfdata->hcomplete);
+   if (cfdata->feed) fclose (cfdata->feed);
 
    cfdata->hdata = ecore_event_handler_add (ECORE_CON_EVENT_URL_DATA,
                                             _feed_data, 
-- 
1.5.4.GIT

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to