From: Michael B. <mic...@gm...> - 2011-12-03 07:45:18
|
On Sat, 3 Dec 2011 06:58:18 +0100 (CET) Vincent Torri <vt...@un...> wrote: > > > On Fri, 2 Dec 2011, Enlightenment SVN wrote: > > > Log: > > mempools++ > > i'm curious: do you have some numbers about the improvements that > allocators provide ? > > Vincent > > > > > > > Author: discomfitor > > Date: 2011-12-02 19:39:07 -0800 (Fri, 02 Dec 2011) > > New Revision: 65833 > > Trac: http://trac.enlightenment.org/e/changeset/65833 > > > > Added: > > trunk/ecore/src/lib/ecore/ecore_alloc.c > > trunk/ecore/src/lib/ecore/ecore_types.h Modified: > > trunk/ecore/ChangeLog trunk/ecore/NEWS > > trunk/ecore/src/lib/ecore/Makefile.am trunk/ecore/src/lib/ecore/ecore.c > > trunk/ecore/src/lib/ecore/ecore_anim.c > > trunk/ecore/src/lib/ecore/ecore_events.c > > trunk/ecore/src/lib/ecore/ecore_idle_enterer.c > > trunk/ecore/src/lib/ecore/ecore_idle_exiter.c > > trunk/ecore/src/lib/ecore/ecore_idler.c > > trunk/ecore/src/lib/ecore/ecore_job.c > > trunk/ecore/src/lib/ecore/ecore_main.c > > trunk/ecore/src/lib/ecore/ecore_pipe.c > > trunk/ecore/src/lib/ecore/ecore_poll.c > > trunk/ecore/src/lib/ecore/ecore_private.h > > trunk/ecore/src/lib/ecore/ecore_timer.c > > > > Modified: trunk/ecore/ChangeLog > > =================================================================== > > --- trunk/ecore/ChangeLog 2011-12-02 22:50:00 UTC (rev 65832) > > +++ trunk/ecore/ChangeLog 2011-12-03 03:39:07 UTC (rev 65833) > > @@ -360,3 +360,7 @@ > > 2011-11-29 Mike McCormack > > > > * Allow quitting before entering the glib version of the main loop > > + > > +2011-12-02 Mike Blumenkrantz > > + > > + * Use mempools for allocations > > > > Modified: trunk/ecore/NEWS > > =================================================================== > > --- trunk/ecore/NEWS 2011-12-02 22:50:00 UTC (rev 65832) > > +++ trunk/ecore/NEWS 2011-12-03 03:39:07 UTC (rev 65833) > > @@ -1,3 +1,13 @@ > > +Ecore 1.2.0 > > + > > +Changes since Ecore 1.1.0: > > +-------------------------- > > + > > +Improvements: > > + * ecore: > > + - most allocations moved to mempools > > + > > + > > Ecore 1.1.0 > > > > Changes since Ecore 1.0.0: > > > > Modified: trunk/ecore/src/lib/ecore/Makefile.am > > =================================================================== > > --- trunk/ecore/src/lib/ecore/Makefile.am 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/Makefile.am 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -11,6 +11,7 @@ > > > > libecore_la_SOURCES = \ > > ecore.c \ > > +ecore_alloc.c \ > > ecore_anim.c \ > > ecore_app.c \ > > ecore_events.c \ > > > > Modified: trunk/ecore/src/lib/ecore/ecore.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore.c 2011-12-02 22:50:00 UTC (rev > > 65832) +++ trunk/ecore/src/lib/ecore/ecore.c 2011-12-03 03:39:07 UTC > > (rev 65833) @@ -159,6 +159,7 @@ > > } > > if (getenv("ECORE_FPS_DEBUG")) _ecore_fps_debug = 1; > > if (_ecore_fps_debug) _ecore_fps_debug_init(); > > + if (!ecore_mempool_init()) goto shutdown_mempool; > > _ecore_main_loop_init(); > > _ecore_signal_init(); > > _ecore_thread_init(); > > @@ -191,6 +192,8 @@ > > > > return _ecore_init_count; > > > > +shutdown_mempool: > > + ecore_mempool_shutdown(); > > shutdown_log_dom: > > eina_shutdown(); > > shutdown_evil: > > @@ -255,7 +258,7 @@ > > _ecore_memory_max_free); > > } > > #endif > > - > > + ecore_mempool_shutdown(); > > eina_log_domain_unregister(_ecore_log_dom); > > _ecore_log_dom = -1; > > eina_shutdown(); > > > > Modified: trunk/ecore/src/lib/ecore/ecore_anim.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_anim.c 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_anim.c 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -8,22 +8,6 @@ > > #include "Ecore.h" > > #include "ecore_private.h" > > > > -struct _Ecore_Animator > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - > > - Ecore_Task_Cb func; > > - void *data; > > - > > - double start, run; > > - Ecore_Timeline_Cb run_func; > > - void *run_data; > > - > > - Eina_Bool delete_me : 1; > > - Eina_Bool suspended : 1; > > -}; > > - > > static Eina_Bool _ecore_animator_run(void *data); > > static Eina_Bool _ecore_animator(void *data); > > > > @@ -121,7 +105,7 @@ > > eina_inlist_remove(EINA_INLIST_GET(animators), > > EINA_INLIST_GET(animator)); > > ECORE_MAGIC_SET(animator, ECORE_MAGIC_NONE); > > - free(animator); > > + ecore_animator_mp_free(animator); > > animators_delete_me--; > > if (animators_delete_me == 0) break; > > } > > @@ -142,7 +126,7 @@ > > Ecore_Animator *animator = NULL; > > > > if (!func) return animator; > > - animator = calloc(1, sizeof(Ecore_Animator)); > > + animator = ecore_animator_calloc(1); > > if (!animator) return animator; > > ECORE_MAGIC_SET(animator, ECORE_MAGIC_ANIMATOR); > > animator->func = func; > > @@ -443,7 +427,7 @@ > > animator = animators; > > animators = (Ecore_Animator > > *)eina_inlist_remove(EINA_INLIST_GET(animators), > > EINA_INLIST_GET(animators)); ECORE_MAGIC_SET(animator, ECORE_MAGIC_NONE); > > - free(animator); > > + ecore_animator_mp_free(animator); > > } > > } > > > > > > Modified: trunk/ecore/src/lib/ecore/ecore_events.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_events.c 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_events.c 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -9,42 +9,6 @@ > > > > static int inpurge = 0; > > > > -struct _Ecore_Event_Handler > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - int type; > > - Ecore_Event_Handler_Cb func; > > - void *data; > > - int references; > > - Eina_Bool delete_me : 1; > > -}; > > - > > -struct _Ecore_Event_Filter > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - Ecore_Data_Cb func_start; > > - Ecore_Filter_Cb func_filter; > > - Ecore_End_Cb func_end; > > - void *loop_data; > > - void *data; > > - int references; > > - Eina_Bool delete_me : 1; > > -}; > > - > > -struct _Ecore_Event > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - int type; > > - void *event; > > - Ecore_End_Cb func_free; > > - void *data; > > - int references; > > - Eina_Bool delete_me : 1; > > -}; > > - > > static int events_num = 0; > > static Ecore_Event *events = NULL; > > static Ecore_Event *event_current = NULL; > > @@ -109,7 +73,7 @@ > > > > if (!func) goto unlock; > > if ((type <= ECORE_EVENT_NONE) || (type >= event_id_max)) goto unlock; > > - eh = calloc(1, sizeof(Ecore_Event_Handler)); > > + eh = ecore_event_handler_calloc(1); > > if (!eh) goto unlock; > > ECORE_MAGIC_SET(eh, ECORE_MAGIC_EVENT_HANDLER); > > eh->type = type; > > @@ -130,7 +94,7 @@ > > new_handlers = realloc(event_handlers, > > event_handlers_alloc_num * sizeof(Ecore_Event_Handler *)); if > > (!new_handlers) { > > - free(eh); > > + ecore_event_handler_mp_free(eh); > > goto unlock; > > } > > event_handlers = new_handlers; > > @@ -234,7 +198,7 @@ > > static void > > _ecore_event_generic_free(void *data __UNUSED__, > > void *event) > > -{ > > +{ /* DO NOT MEMPOOL FREE THIS */ > > free (event); > > } > > > > @@ -358,7 +322,7 @@ > > > > _ecore_lock(); > > if (!func_filter) goto unlock; > > - ef = calloc(1, sizeof(Ecore_Event_Filter)); > > + ef = ecore_event_filter_calloc(1); > > if (!ef) goto unlock; > > ECORE_MAGIC_SET(ef, ECORE_MAGIC_EVENT_FILTER); > > ef->func_start = func_start; > > @@ -469,11 +433,11 @@ > > { > > event_handlers[i] = (Ecore_Event_Handler > > *)eina_inlist_remove(EINA_INLIST_GET(event_handlers[i]), > > EINA_INLIST_GET(event_handlers[i])); ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE); > > - if (!eh->delete_me) free(eh); > > + if (!eh->delete_me) ecore_event_handler_mp_free(eh); > > } > > } > > EINA_LIST_FREE(event_handlers_delete_list, eh) > > - free(eh); > > + ecore_event_handler_mp_free(eh); > > if (event_handlers) free(event_handlers); > > event_handlers = NULL; > > event_handlers_num = 0; > > @@ -482,7 +446,7 @@ > > { > > event_filters = (Ecore_Event_Filter > > *)eina_inlist_remove(EINA_INLIST_GET(event_filters), > > EINA_INLIST_GET(event_filters)); ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE); > > - free(ef); > > + ecore_event_filter_mp_free(ef); > > } > > event_filters_delete_me = 0; > > event_filter_current = NULL; > > @@ -506,7 +470,7 @@ > > { > > Ecore_Event *e; > > > > - e = calloc(1, sizeof(Ecore_Event)); > > + e = ecore_event_calloc(1); > > if (!e) return NULL; > > ECORE_MAGIC_SET(e, ECORE_MAGIC_EVENT); > > e->type = type; > > @@ -535,7 +499,7 @@ > > if (event->func_free) _ecore_call_end_cb(event->func_free, event->data, > > event->event); events = (Ecore_Event > > *)eina_inlist_remove(EINA_INLIST_GET(events), EINA_INLIST_GET(event)); > > ECORE_MAGIC_SET(event, ECORE_MAGIC_NONE); > > - free(event); > > + ecore_event_mp_free(event); > > events_num--; > > return data; > > } > > @@ -638,7 +602,7 @@ > > > > event_filters = (Ecore_Event_Filter > > *)eina_inlist_remove(EINA_INLIST_GET(event_filters), EINA_INLIST_GET(ef)); > > ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE); > > - free(ef); > > + ecore_event_filter_mp_free(ef); > > } > > } > > if (!deleted_in_use) > > @@ -742,7 +706,7 @@ > > > > event_handlers[eh->type] = (Ecore_Event_Handler > > *)eina_inlist_remove(EINA_INLIST_GET(event_handlers[eh->type]), > > EINA_INLIST_GET(eh)); ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE); > > - free(eh); > > + ecore_event_handler_mp_free(eh); > > } > > } > > > > > > Modified: trunk/ecore/src/lib/ecore/ecore_idle_enterer.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_idle_enterer.c 2011-12-02 > > 22:50:00 UTC (rev 65832) +++ > > trunk/ecore/src/lib/ecore/ecore_idle_enterer.c 2011-12-03 03:39:07 > > UTC (rev 65833) @@ -7,16 +7,6 @@ #include "Ecore.h" > > #include "ecore_private.h" > > > > -struct _Ecore_Idle_Enterer > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - Ecore_Task_Cb func; > > - void *data; > > - int references; > > - Eina_Bool delete_me : 1; > > -}; > > - > > static Ecore_Idle_Enterer *idle_enterers = NULL; > > static Ecore_Idle_Enterer *idle_enterer_current = NULL; > > static int idle_enterers_delete_me = 0; > > @@ -49,7 +39,7 @@ > > _ecore_lock(); > > > > if (!func) goto unlock; > > - ie = calloc(1, sizeof(Ecore_Idle_Enterer)); > > + ie = ecore_idle_enterer_calloc(1); > > if (!ie) goto unlock; > > ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER); > > ie->func = func; > > @@ -79,7 +69,7 @@ > > _ecore_lock(); > > > > if (!func) goto unlock; > > - ie = calloc(1, sizeof(Ecore_Idle_Enterer)); > > + ie = ecore_idle_enterer_calloc(1); > > if (!ie) goto unlock; > > ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER); > > ie->func = func; > > @@ -134,7 +124,7 @@ > > { > > idle_enterers = (Ecore_Idle_Enterer > > *)eina_inlist_remove(EINA_INLIST_GET(idle_enterers), > > EINA_INLIST_GET(idle_enterers)); ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); > > - free(ie); > > + ecore_idle_enterer_mp_free(ie); > > } > > idle_enterers_delete_me = 0; > > idle_enterer_current = NULL; > > @@ -190,7 +180,7 @@ > > > > idle_enterers = (Ecore_Idle_Enterer > > *)eina_inlist_remove(EINA_INLIST_GET(idle_enterers), EINA_INLIST_GET(ie)); > > ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); > > - free(ie); > > + ecore_idle_enterer_mp_free(ie); > > } > > } > > if (!deleted_idler_enterers_in_use) > > > > Modified: trunk/ecore/src/lib/ecore/ecore_idle_exiter.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_idle_exiter.c 2011-12-02 > > 22:50:00 UTC (rev 65832) +++ > > trunk/ecore/src/lib/ecore/ecore_idle_exiter.c 2011-12-03 03:39:07 > > UTC (rev 65833) @@ -7,16 +7,6 @@ #include "Ecore.h" > > #include "ecore_private.h" > > > > -struct _Ecore_Idle_Exiter > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - Ecore_Task_Cb func; > > - void *data; > > - int references; > > - Eina_Bool delete_me : 1; > > -}; > > - > > static Ecore_Idle_Exiter *idle_exiters = NULL; > > static Ecore_Idle_Exiter *idle_exiter_current = NULL; > > static int idle_exiters_delete_me = 0; > > @@ -47,7 +37,7 @@ > > > > _ecore_lock(); > > if (!func) goto unlock; > > - ie = calloc(1, sizeof(Ecore_Idle_Exiter)); > > + ie = ecore_idle_exiter_calloc(1); > > if (!ie) goto unlock; > > ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_EXITER); > > ie->func = func; > > @@ -102,7 +92,7 @@ > > { > > idle_exiters = (Ecore_Idle_Exiter > > *)eina_inlist_remove(EINA_INLIST_GET(idle_exiters), > > EINA_INLIST_GET(idle_exiters)); ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); > > - free(ie); > > + ecore_idle_exiter_mp_free(ie); > > } > > idle_exiters_delete_me = 0; > > idle_exiter_current = NULL; > > @@ -159,7 +149,7 @@ > > > > idle_exiters = (Ecore_Idle_Exiter > > *)eina_inlist_remove(EINA_INLIST_GET(idle_exiters), EINA_INLIST_GET(ie)); > > ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); > > - free(ie); > > + ecore_idle_exiter_mp_free(ie); > > } > > } > > if (!deleted_idler_exiters_in_use) > > > > Modified: trunk/ecore/src/lib/ecore/ecore_idler.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_idler.c 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_idler.c 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -7,16 +7,6 @@ > > #include "Ecore.h" > > #include "ecore_private.h" > > > > -struct _Ecore_Idler > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - Ecore_Task_Cb func; > > - void *data; > > - int references; > > - Eina_Bool delete_me : 1; > > -}; > > - > > static Ecore_Idler *idlers = NULL; > > static Ecore_Idler *idler_current = NULL; > > static int idlers_delete_me = 0; > > @@ -32,7 +22,7 @@ > > > > _ecore_lock(); > > if (!func) goto unlock; > > - ie = calloc(1, sizeof(Ecore_Idler)); > > + ie = ecore_idler_calloc(1); > > if (!ie) goto unlock; > > ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLER); > > ie->func = func; > > @@ -86,7 +76,7 @@ > > { > > idlers = (Ecore_Idler *)eina_inlist_remove(EINA_INLIST_GET(idlers), > > EINA_INLIST_GET(idlers)); ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); > > - free(ie); > > + ecore_idler_mp_free(ie); > > } > > idlers_delete_me = 0; > > idler_current = NULL; > > @@ -139,7 +129,7 @@ > > > > idlers = (Ecore_Idler > > *)eina_inlist_remove(EINA_INLIST_GET(idlers), EINA_INLIST_GET(ie)); > > ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); > > - free(ie); > > + ecore_idler_mp_free(ie); > > } > > } > > if (!deleted_idlers_in_use) > > > > Modified: trunk/ecore/src/lib/ecore/ecore_job.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_job.c 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_job.c 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -16,14 +16,6 @@ > > static int ecore_event_job_type = 0; > > static Ecore_Event_Handler *_ecore_job_handler = NULL; > > > > -struct _Ecore_Job > > -{ > > - ECORE_MAGIC; > > - Ecore_Event *event; > > - Ecore_Cb func; > > - void *data; > > -}; > > - > > void > > _ecore_job_init(void) > > { > > @@ -61,13 +53,13 @@ > > > > if (!func) return NULL; > > > > - job = calloc(1, sizeof(Ecore_Job)); > > + job = ecore_job_calloc(1); > > if (!job) return NULL; > > ECORE_MAGIC_SET(job, ECORE_MAGIC_JOB); > > job->event = ecore_event_add(ecore_event_job_type, job, > > _ecore_job_event_free, NULL); if (!job->event) > > { > > - free(job); > > + ecore_job_mp_free(job); > > return NULL; > > } > > job->func = func; > > @@ -115,8 +107,8 @@ > > > > static void > > _ecore_job_event_free(void *data __UNUSED__, > > - void *ev) > > + void *job) > > { > > - free(ev); > > + ecore_job_mp_free(job); > > } > > > > > > Modified: trunk/ecore/src/lib/ecore/ecore_main.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_main.c 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_main.c 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -145,42 +145,6 @@ > > > > #define NS_PER_SEC (1000.0 * 1000.0 * 1000.0) > > > > -struct _Ecore_Fd_Handler > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - Ecore_Fd_Handler *next_ready; > > - int fd; > > - Ecore_Fd_Handler_Flags flags; > > - Ecore_Fd_Cb func; > > - void *data; > > - Ecore_Fd_Cb buf_func; > > - void *buf_data; > > - Ecore_Fd_Prep_Cb prep_func; > > - void *prep_data; > > - int references; > > - Eina_Bool read_active : 1; > > - Eina_Bool write_active : 1; > > - Eina_Bool error_active : 1; > > - Eina_Bool delete_me : 1; > > -#if defined(USE_G_MAIN_LOOP) > > - GPollFD gfd; > > -#endif > > -}; > > - > > -#ifdef _WIN32 > > -struct _Ecore_Win32_Handler > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - HANDLE h; > > - Ecore_Win32_Handle_Cb func; > > - void *data; > > - int references; > > - Eina_Bool delete_me : 1; > > -}; > > -#endif > > - > > #ifndef USE_G_MAIN_LOOP > > static int _ecore_main_select(double timeout); > > #endif > > @@ -990,7 +954,7 @@ > > > > if ((fd < 0) || (flags == 0) || (!func)) goto unlock; > > > > - fdh = calloc(1, sizeof(Ecore_Fd_Handler)); > > + fdh = ecore_fd_handler_calloc(1); > > if (!fdh) goto unlock; > > ECORE_MAGIC_SET(fdh, ECORE_MAGIC_FD_HANDLER); > > fdh->next_ready = NULL; > > @@ -1000,7 +964,7 @@ > > { > > int err = errno; > > ERR("Failed to add poll on fd %d (errno = %d: %s)!", fd, err, > > strerror(err)); > > - free(fdh); > > + ecore_fd_handler_mp_free(fdh); > > fdh = NULL; > > goto unlock; > > } > > @@ -1033,7 +997,7 @@ > > > > if (!h || !func) return NULL; > > > > - wh = calloc(1, sizeof(Ecore_Win32_Handler)); > > + wh = ecore_win32_handler_calloc(1); > > if (!wh) return NULL; > > ECORE_MAGIC_SET(wh, ECORE_MAGIC_WIN32_HANDLER); > > wh->h = (HANDLE)h; > > @@ -1263,7 +1227,7 @@ > > fd_handlers = (Ecore_Fd_Handler > > *)eina_inlist_remove(EINA_INLIST_GET(fd_handlers), EINA_INLIST_GET(fdh)); > > ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE); > > - free(fdh); > > + ecore_fd_handler_mp_free(fdh); > > } > > if (fd_handlers_with_buffer) > > fd_handlers_with_buffer = eina_list_free(fd_handlers_with_buffer); > > @@ -1286,7 +1250,7 @@ > > win32_handlers = (Ecore_Win32_Handler > > *)eina_inlist_remove(EINA_INLIST_GET(win32_handlers), EINA_INLIST_GET(wh)); > > ECORE_MAGIC_SET(wh, ECORE_MAGIC_NONE); > > - free(wh); > > + ecore_win32_handler_mp_free(wh); > > } > > win32_handlers_delete_me = EINA_FALSE; > > win32_handler_current = NULL; > > @@ -1527,7 +1491,7 @@ > > fd_handlers = (Ecore_Fd_Handler *) > > eina_inlist_remove(EINA_INLIST_GET(fd_handlers), > > EINA_INLIST_GET(fdh)); ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE); > > - free(fdh); > > + ecore_fd_handler_mp_free(fdh); > > fd_handlers_to_delete = > > eina_list_remove_list(fd_handlers_to_delete, l); } > > } > > @@ -1558,7 +1522,7 @@ > > eina_inlist_remove(EINA_INLIST_GET(win32_handlers), > > EINA_INLIST_GET(wh)); > > ECORE_MAGIC_SET(wh, ECORE_MAGIC_NONE); > > - free(wh); > > + ecore_win32_handler_mp_free(wh); > > } > > } > > if (!deleted_in_use) win32_handlers_delete_me = EINA_FALSE; > > > > Modified: trunk/ecore/src/lib/ecore/ecore_pipe.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_pipe.c 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_pipe.c 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -80,21 +80,6 @@ > > > > #endif /* ! _WIN32 */ > > > > -struct _Ecore_Pipe > > -{ > > - ECORE_MAGIC; > > - int fd_read; > > - int fd_write; > > - Ecore_Fd_Handler *fd_handler; > > - const void *data; > > - Ecore_Pipe_Cb handler; > > - unsigned int len; > > - int handling; > > - size_t already_read; > > - void *passed_data; > > - int message; > > - Eina_Bool delete_me : 1; > > -}; > > > > static Eina_Bool _ecore_pipe_read(void *data, > > Ecore_Fd_Handler *fd_handler); > > @@ -125,12 +110,12 @@ > > > > if (!handler) return NULL; > > > > - p = (Ecore_Pipe *)calloc(1, sizeof(Ecore_Pipe)); > > + p = ecore_pipe_calloc(1); > > if (!p) return NULL; > > > > if (pipe(fds)) > > { > > - free(p); > > + ecore_pipe_mp_free(p); > > return NULL; > > } > > > > @@ -171,7 +156,7 @@ > > if (p->fd_read != PIPE_FD_INVALID) pipe_close(p->fd_read); > > if (p->fd_write != PIPE_FD_INVALID) pipe_close(p->fd_write); > > data = (void *)p->data; > > - free(p); > > + ecore_pipe_mp_free(p); > > return data; > > } > > > > > > Modified: trunk/ecore/src/lib/ecore/ecore_poll.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_poll.c 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_poll.c 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -7,16 +7,6 @@ > > #include "Ecore.h" > > #include "ecore_private.h" > > > > -struct _Ecore_Poller > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - int ibit; > > - unsigned char delete_me : 1; > > - Ecore_Task_Cb func; > > - void *data; > > -}; > > - > > static Ecore_Timer *timer = NULL; > > static int min_interval = -1; > > static int interval_incr = 0; > > @@ -159,7 +149,7 @@ > > if (poller->delete_me) > > { > > pollers[i] = (Ecore_Poller > > *)eina_inlist_remove(EINA_INLIST_GET(pollers[i]), EINA_INLIST_GET(poller)); > > - free(poller); > > + ecore_poller_mp_free(poller); > > poller_delete_count--; > > changes++; > > if (poller_delete_count <= 0) break; > > @@ -281,7 +271,7 @@ > > if (!func) return NULL; > > if (interval < 1) interval = 1; > > > > - poller = calloc(1, sizeof(Ecore_Poller)); > > + poller = ecore_poller_calloc(1); > > if (!poller) return NULL; > > ECORE_MAGIC_SET(poller, ECORE_MAGIC_POLLER); > > /* interval MUST be a power of 2, so enforce it */ > > @@ -413,7 +403,7 @@ > > /* not in loop so safe - delete immediately */ > > data = poller->data; > > pollers[poller->ibit] = (Ecore_Poller > > *)eina_inlist_remove(EINA_INLIST_GET(pollers[poller->ibit]), > > EINA_INLIST_GET(poller)); > > - free(poller); > > + ecore_poller_mp_free(poller); > > _ecore_poller_next_tick_eval(); > > return data; > > } > > @@ -433,7 +423,7 @@ > > while ((poller = pollers[i])) > > { > > pollers[i] = (Ecore_Poller > > *)eina_inlist_remove(EINA_INLIST_GET(pollers[i]), > > EINA_INLIST_GET(pollers[i])); > > - free(poller); > > + ecore_poller_mp_free(poller); > > } > > } > > } > > > > Modified: trunk/ecore/src/lib/ecore/ecore_private.h > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_private.h 2011-12-02 22:50:00 > > UTC (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_private.h > > 2011-12-03 03:39:07 UTC (rev 65833) @@ -79,12 +79,15 @@ > > #define ECORE_MAGIC_WIN32_HANDLER 0xf7e8f1a3 > > #define ECORE_MAGIC_JOB 0x76543210 > > > > +typedef unsigned int Ecore_Magic; > > #define ECORE_MAGIC Ecore_Magic __magic > > > > #define ECORE_MAGIC_SET(d, m) (d)->__magic = (m) > > #define ECORE_MAGIC_CHECK(d, m) ((d) && ((d)->__magic == (m))) > > #define ECORE_MAGIC_FAIL(d, m, fn) _ecore_magic_fail((d), (d) ? > > (d)->__magic : 0, (m), (fn)); > > > > +#include "ecore_types.h" > > + > > /* undef the following, we want our version */ > > #undef FREE > > #define FREE(ptr) free(ptr); ptr = NULL; > > @@ -116,8 +119,6 @@ > > return; \ > > } > > > > -typedef unsigned int Ecore_Magic; > > - > > EAPI void _ecore_magic_fail(const void *d, > > Ecore_Magic m, > > Ecore_Magic req_m, > > @@ -350,4 +351,26 @@ > > extern Eina_Bool _ecore_glib_always_integrate; > > extern Ecore_Select_Function main_loop_select; > > > > +Eina_Bool ecore_mempool_init(void); > > +void ecore_mempool_shutdown(void); > > +#define GENERIC_ALLOC_FREE_HEADER(TYPE, Type) \ > > + TYPE *Type##_calloc(unsigned int); \ > > + void Type##_mp_free(TYPE *e); > > + > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Animator, ecore_animator); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Event_Handler, ecore_event_handler); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Event_Filter, ecore_event_filter); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Event, ecore_event); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Idle_Exiter, ecore_idle_exiter); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Idle_Enterer, ecore_idle_enterer); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Idler, ecore_idler); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Job, ecore_job); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Timer, ecore_timer); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Poller, ecore_poller); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Pipe, ecore_pipe); > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Fd_Handler, ecore_fd_handler); > > +#ifdef _WIN32 > > +GENERIC_ALLOC_FREE_HEADER(Ecore_Win32_Handler, ecore_win32_handler); > > #endif > > + > > +#endif > > > > Modified: trunk/ecore/src/lib/ecore/ecore_timer.c > > =================================================================== > > --- trunk/ecore/src/lib/ecore/ecore_timer.c 2011-12-02 22:50:00 UTC > > (rev 65832) +++ trunk/ecore/src/lib/ecore/ecore_timer.c 2011-12-03 > > 03:39:07 UTC (rev 65833) @@ -8,34 +8,6 @@ > > #include "Ecore.h" > > #include "ecore_private.h" > > > > -#ifdef WANT_ECORE_TIMER_DUMP > > -# include <string.h> > > -# include <execinfo.h> > > -# define ECORE_TIMER_DEBUG_BT_NUM 64 > > -typedef void (*Ecore_Timer_Bt_Func)(); > > -#endif > > - > > -struct _Ecore_Timer > > -{ > > - EINA_INLIST; > > - ECORE_MAGIC; > > - double in; > > - double at; > > - double pending; > > - Ecore_Task_Cb func; > > - void *data; > > - > > -#ifdef WANT_ECORE_TIMER_DUMP > > - Ecore_Timer_Bt_Func timer_bt[ECORE_TIMER_DEBUG_BT_NUM]; > > - int timer_bt_num; > > -#endif > > - > > - int references; > > - unsigned char delete_me : 1; > > - unsigned char just_added : 1; > > - unsigned char frozen : 1; > > -}; > > - > > static void _ecore_timer_set(Ecore_Timer *timer, > > double at, > > double in, > > @@ -140,7 +112,7 @@ > > _ecore_lock(); > > if (!func) goto unlock; > > if (in < 0.0) in = 0.0; > > - timer = calloc(1, sizeof(Ecore_Timer)); > > + timer = ecore_timer_calloc(1); > > if (!timer) goto unlock; > > ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER); > > now = ecore_time_get(); > > @@ -470,7 +442,7 @@ > > > > if (!func) return timer; > > if (in < 0.0) in = 0.0; > > - timer = calloc(1, sizeof(Ecore_Timer)); > > + timer = ecore_timer_calloc(1); > > if (!timer) return timer; > > ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER); > > now = ecore_loop_time_get(); > > @@ -510,7 +482,7 @@ > > if (timer->delete_me) > > timers_delete_me--; > > > > - free(timer); > > + ecore_timer_mp_free(timer); > > return data; > > } > > > > @@ -529,14 +501,14 @@ > > { > > timers = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(timers), > > EINA_INLIST_GET(timers)); ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); > > - free(timer); > > + ecore_timer_mp_free(timer); > > } > > > > while ((timer = suspended)) > > { > > suspended = (Ecore_Timer > > *)eina_inlist_remove(EINA_INLIST_GET(suspended), > > EINA_INLIST_GET(suspended)); ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); > > - free(timer); > > + ecore_timer_mp_free(timer); > > } > > > > timer_current = NULL; > > @@ -563,7 +535,7 @@ > > } > > timers = (Ecore_Timer > > *)eina_inlist_remove(EINA_INLIST_GET(timers), EINA_INLIST_GET(timer)); > > ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); > > - free(timer); > > + ecore_timer_mp_free(timer); > > timers_delete_me--; > > done++; > > if (timers_delete_me == 0) return; > > @@ -583,7 +555,7 @@ > > } > > suspended = (Ecore_Timer > > *)eina_inlist_remove(EINA_INLIST_GET(suspended), EINA_INLIST_GET(timer)); > > ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); > > - free(timer); > > + ecore_timer_mp_free(timer); > > timers_delete_me--; > > done++; > > if (timers_delete_me == 0) return; > > > > ask cedric, his idea |