On Sat, 3 Dec 2011 06:58:18 +0100 (CET)
Vincent Torri <vto...@univ-evry.fr> 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

------------------------------------------------------------------------------
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. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to