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