forked from enlightenment/efl
parent
ccf4af02aa
commit
54a2db0044
|
@ -360,3 +360,7 @@
|
||||||
2011-11-29 Mike McCormack
|
2011-11-29 Mike McCormack
|
||||||
|
|
||||||
* Allow quitting before entering the glib version of the main loop
|
* Allow quitting before entering the glib version of the main loop
|
||||||
|
|
||||||
|
2011-12-02 Mike Blumenkrantz
|
||||||
|
|
||||||
|
* Use mempools for allocations
|
||||||
|
|
|
@ -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
|
Ecore 1.1.0
|
||||||
|
|
||||||
Changes since Ecore 1.0.0:
|
Changes since Ecore 1.0.0:
|
||||||
|
|
|
@ -11,6 +11,7 @@ includesdir = $(includedir)/ecore-@VMAJ@
|
||||||
|
|
||||||
libecore_la_SOURCES = \
|
libecore_la_SOURCES = \
|
||||||
ecore.c \
|
ecore.c \
|
||||||
|
ecore_alloc.c \
|
||||||
ecore_anim.c \
|
ecore_anim.c \
|
||||||
ecore_app.c \
|
ecore_app.c \
|
||||||
ecore_events.c \
|
ecore_events.c \
|
||||||
|
|
|
@ -159,6 +159,7 @@ ecore_init(void)
|
||||||
}
|
}
|
||||||
if (getenv("ECORE_FPS_DEBUG")) _ecore_fps_debug = 1;
|
if (getenv("ECORE_FPS_DEBUG")) _ecore_fps_debug = 1;
|
||||||
if (_ecore_fps_debug) _ecore_fps_debug_init();
|
if (_ecore_fps_debug) _ecore_fps_debug_init();
|
||||||
|
if (!ecore_mempool_init()) goto shutdown_mempool;
|
||||||
_ecore_main_loop_init();
|
_ecore_main_loop_init();
|
||||||
_ecore_signal_init();
|
_ecore_signal_init();
|
||||||
_ecore_thread_init();
|
_ecore_thread_init();
|
||||||
|
@ -191,6 +192,8 @@ ecore_init(void)
|
||||||
|
|
||||||
return _ecore_init_count;
|
return _ecore_init_count;
|
||||||
|
|
||||||
|
shutdown_mempool:
|
||||||
|
ecore_mempool_shutdown();
|
||||||
shutdown_log_dom:
|
shutdown_log_dom:
|
||||||
eina_shutdown();
|
eina_shutdown();
|
||||||
shutdown_evil:
|
shutdown_evil:
|
||||||
|
@ -255,7 +258,7 @@ ecore_shutdown(void)
|
||||||
_ecore_memory_max_free);
|
_ecore_memory_max_free);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ecore_mempool_shutdown();
|
||||||
eina_log_domain_unregister(_ecore_log_dom);
|
eina_log_domain_unregister(_ecore_log_dom);
|
||||||
_ecore_log_dom = -1;
|
_ecore_log_dom = -1;
|
||||||
eina_shutdown();
|
eina_shutdown();
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <Eina.h>
|
||||||
|
#include "Ecore.h"
|
||||||
|
#include "ecore_private.h"
|
||||||
|
|
||||||
|
typedef struct _Ecore_Mempool Ecore_Mempool;
|
||||||
|
struct _Ecore_Mempool
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
Eina_Mempool *mp;
|
||||||
|
size_t size;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define GENERIC_ALLOC_FREE(TYPE, Type) \
|
||||||
|
Ecore_Mempool Type##_mp = { #TYPE, NULL, sizeof (TYPE) }; \
|
||||||
|
TYPE * \
|
||||||
|
Type##_calloc(unsigned int num) \
|
||||||
|
{ \
|
||||||
|
return eina_mempool_calloc(Type##_mp.mp, num * sizeof (TYPE)); \
|
||||||
|
} \
|
||||||
|
void \
|
||||||
|
Type##_mp_free(TYPE *e) \
|
||||||
|
{ \
|
||||||
|
eina_mempool_free(Type##_mp.mp, e); \
|
||||||
|
}
|
||||||
|
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Animator, ecore_animator);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Event_Handler, ecore_event_handler);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Event_Filter, ecore_event_filter);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Event, ecore_event);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Idle_Exiter, ecore_idle_exiter);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Idle_Enterer, ecore_idle_enterer);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Idler, ecore_idler);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Job, ecore_job);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Timer, ecore_timer);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Poller, ecore_poller);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Pipe, ecore_pipe);
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Fd_Handler, ecore_fd_handler);
|
||||||
|
#ifdef _WIN32
|
||||||
|
GENERIC_ALLOC_FREE(Ecore_Win32_Handler, ecore_win32_handler);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static Ecore_Mempool *mempool_array[] = {
|
||||||
|
&ecore_animator_mp,
|
||||||
|
&ecore_event_handler_mp,
|
||||||
|
&ecore_event_filter_mp,
|
||||||
|
&ecore_event_mp,
|
||||||
|
&ecore_idle_exiter_mp,
|
||||||
|
&ecore_idle_enterer_mp,
|
||||||
|
&ecore_idler_mp,
|
||||||
|
&ecore_job_mp,
|
||||||
|
&ecore_timer_mp,
|
||||||
|
&ecore_poller_mp,
|
||||||
|
&ecore_pipe_mp,
|
||||||
|
&ecore_fd_handler_mp,
|
||||||
|
#ifdef _WIN32
|
||||||
|
&ecore_win32_handler_mp
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
ecore_mempool_init(void)
|
||||||
|
{
|
||||||
|
const char *choice;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
choice = getenv("EINA_MEMPOOL");
|
||||||
|
if ((!choice) || (!choice[0]))
|
||||||
|
choice = "chained_mempool";
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof (mempool_array) / sizeof (mempool_array[0]); ++i)
|
||||||
|
{
|
||||||
|
retry:
|
||||||
|
mempool_array[i]->mp = eina_mempool_add(choice, mempool_array[i]->name, NULL, mempool_array[i]->size, 64);
|
||||||
|
if (!mempool_array[i]->mp)
|
||||||
|
{
|
||||||
|
if (!strcmp(choice, "pass_through"))
|
||||||
|
{
|
||||||
|
ERR("Falling back to pass through ! Previously tried '%s' mempool.", choice);
|
||||||
|
choice = "pass_through";
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERR("Impossible to allocate mempool '%s' !", choice);
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ecore_mempool_shutdown(void)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof (mempool_array) / sizeof (mempool_array[0]); ++i)
|
||||||
|
{
|
||||||
|
eina_mempool_del(mempool_array[i]->mp);
|
||||||
|
mempool_array[i]->mp = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,22 +8,6 @@
|
||||||
#include "Ecore.h"
|
#include "Ecore.h"
|
||||||
#include "ecore_private.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_run(void *data);
|
||||||
static Eina_Bool _ecore_animator(void *data);
|
static Eina_Bool _ecore_animator(void *data);
|
||||||
|
|
||||||
|
@ -121,7 +105,7 @@ _do_tick(void)
|
||||||
eina_inlist_remove(EINA_INLIST_GET(animators),
|
eina_inlist_remove(EINA_INLIST_GET(animators),
|
||||||
EINA_INLIST_GET(animator));
|
EINA_INLIST_GET(animator));
|
||||||
ECORE_MAGIC_SET(animator, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(animator, ECORE_MAGIC_NONE);
|
||||||
free(animator);
|
ecore_animator_mp_free(animator);
|
||||||
animators_delete_me--;
|
animators_delete_me--;
|
||||||
if (animators_delete_me == 0) break;
|
if (animators_delete_me == 0) break;
|
||||||
}
|
}
|
||||||
|
@ -142,7 +126,7 @@ _ecore_animator_add(Ecore_Task_Cb func,
|
||||||
Ecore_Animator *animator = NULL;
|
Ecore_Animator *animator = NULL;
|
||||||
|
|
||||||
if (!func) return animator;
|
if (!func) return animator;
|
||||||
animator = calloc(1, sizeof(Ecore_Animator));
|
animator = ecore_animator_calloc(1);
|
||||||
if (!animator) return animator;
|
if (!animator) return animator;
|
||||||
ECORE_MAGIC_SET(animator, ECORE_MAGIC_ANIMATOR);
|
ECORE_MAGIC_SET(animator, ECORE_MAGIC_ANIMATOR);
|
||||||
animator->func = func;
|
animator->func = func;
|
||||||
|
@ -443,7 +427,7 @@ _ecore_animator_shutdown(void)
|
||||||
animator = animators;
|
animator = animators;
|
||||||
animators = (Ecore_Animator *)eina_inlist_remove(EINA_INLIST_GET(animators), EINA_INLIST_GET(animators));
|
animators = (Ecore_Animator *)eina_inlist_remove(EINA_INLIST_GET(animators), EINA_INLIST_GET(animators));
|
||||||
ECORE_MAGIC_SET(animator, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(animator, ECORE_MAGIC_NONE);
|
||||||
free(animator);
|
ecore_animator_mp_free(animator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,42 +9,6 @@
|
||||||
|
|
||||||
static int inpurge = 0;
|
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 int events_num = 0;
|
||||||
static Ecore_Event *events = NULL;
|
static Ecore_Event *events = NULL;
|
||||||
static Ecore_Event *event_current = NULL;
|
static Ecore_Event *event_current = NULL;
|
||||||
|
@ -109,7 +73,7 @@ ecore_event_handler_add(int type,
|
||||||
|
|
||||||
if (!func) goto unlock;
|
if (!func) goto unlock;
|
||||||
if ((type <= ECORE_EVENT_NONE) || (type >= event_id_max)) 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;
|
if (!eh) goto unlock;
|
||||||
ECORE_MAGIC_SET(eh, ECORE_MAGIC_EVENT_HANDLER);
|
ECORE_MAGIC_SET(eh, ECORE_MAGIC_EVENT_HANDLER);
|
||||||
eh->type = type;
|
eh->type = type;
|
||||||
|
@ -130,7 +94,7 @@ ecore_event_handler_add(int type,
|
||||||
new_handlers = realloc(event_handlers, event_handlers_alloc_num * sizeof(Ecore_Event_Handler *));
|
new_handlers = realloc(event_handlers, event_handlers_alloc_num * sizeof(Ecore_Event_Handler *));
|
||||||
if (!new_handlers)
|
if (!new_handlers)
|
||||||
{
|
{
|
||||||
free(eh);
|
ecore_event_handler_mp_free(eh);
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
event_handlers = new_handlers;
|
event_handlers = new_handlers;
|
||||||
|
@ -234,7 +198,7 @@ unlock:
|
||||||
static void
|
static void
|
||||||
_ecore_event_generic_free(void *data __UNUSED__,
|
_ecore_event_generic_free(void *data __UNUSED__,
|
||||||
void *event)
|
void *event)
|
||||||
{
|
{ /* DO NOT MEMPOOL FREE THIS */
|
||||||
free (event);
|
free (event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,7 +322,7 @@ ecore_event_filter_add(Ecore_Data_Cb func_start,
|
||||||
|
|
||||||
_ecore_lock();
|
_ecore_lock();
|
||||||
if (!func_filter) goto unlock;
|
if (!func_filter) goto unlock;
|
||||||
ef = calloc(1, sizeof(Ecore_Event_Filter));
|
ef = ecore_event_filter_calloc(1);
|
||||||
if (!ef) goto unlock;
|
if (!ef) goto unlock;
|
||||||
ECORE_MAGIC_SET(ef, ECORE_MAGIC_EVENT_FILTER);
|
ECORE_MAGIC_SET(ef, ECORE_MAGIC_EVENT_FILTER);
|
||||||
ef->func_start = func_start;
|
ef->func_start = func_start;
|
||||||
|
@ -469,11 +433,11 @@ _ecore_event_shutdown(void)
|
||||||
{
|
{
|
||||||
event_handlers[i] = (Ecore_Event_Handler *)eina_inlist_remove(EINA_INLIST_GET(event_handlers[i]), EINA_INLIST_GET(event_handlers[i]));
|
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);
|
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)
|
EINA_LIST_FREE(event_handlers_delete_list, eh)
|
||||||
free(eh);
|
ecore_event_handler_mp_free(eh);
|
||||||
if (event_handlers) free(event_handlers);
|
if (event_handlers) free(event_handlers);
|
||||||
event_handlers = NULL;
|
event_handlers = NULL;
|
||||||
event_handlers_num = 0;
|
event_handlers_num = 0;
|
||||||
|
@ -482,7 +446,7 @@ _ecore_event_shutdown(void)
|
||||||
{
|
{
|
||||||
event_filters = (Ecore_Event_Filter *)eina_inlist_remove(EINA_INLIST_GET(event_filters), EINA_INLIST_GET(event_filters));
|
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);
|
ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE);
|
||||||
free(ef);
|
ecore_event_filter_mp_free(ef);
|
||||||
}
|
}
|
||||||
event_filters_delete_me = 0;
|
event_filters_delete_me = 0;
|
||||||
event_filter_current = NULL;
|
event_filter_current = NULL;
|
||||||
|
@ -506,7 +470,7 @@ _ecore_event_add(int type,
|
||||||
{
|
{
|
||||||
Ecore_Event *e;
|
Ecore_Event *e;
|
||||||
|
|
||||||
e = calloc(1, sizeof(Ecore_Event));
|
e = ecore_event_calloc(1);
|
||||||
if (!e) return NULL;
|
if (!e) return NULL;
|
||||||
ECORE_MAGIC_SET(e, ECORE_MAGIC_EVENT);
|
ECORE_MAGIC_SET(e, ECORE_MAGIC_EVENT);
|
||||||
e->type = type;
|
e->type = type;
|
||||||
|
@ -535,7 +499,7 @@ _ecore_event_del(Ecore_Event *event)
|
||||||
if (event->func_free) _ecore_call_end_cb(event->func_free, event->data, event->event);
|
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));
|
events = (Ecore_Event *)eina_inlist_remove(EINA_INLIST_GET(events), EINA_INLIST_GET(event));
|
||||||
ECORE_MAGIC_SET(event, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(event, ECORE_MAGIC_NONE);
|
||||||
free(event);
|
ecore_event_mp_free(event);
|
||||||
events_num--;
|
events_num--;
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -638,7 +602,7 @@ _ecore_event_filters_apply()
|
||||||
|
|
||||||
event_filters = (Ecore_Event_Filter *)eina_inlist_remove(EINA_INLIST_GET(event_filters), EINA_INLIST_GET(ef));
|
event_filters = (Ecore_Event_Filter *)eina_inlist_remove(EINA_INLIST_GET(event_filters), EINA_INLIST_GET(ef));
|
||||||
ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE);
|
||||||
free(ef);
|
ecore_event_filter_mp_free(ef);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!deleted_in_use)
|
if (!deleted_in_use)
|
||||||
|
@ -742,7 +706,7 @@ _ecore_event_call(void)
|
||||||
|
|
||||||
event_handlers[eh->type] = (Ecore_Event_Handler *)eina_inlist_remove(EINA_INLIST_GET(event_handlers[eh->type]), EINA_INLIST_GET(eh));
|
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);
|
ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE);
|
||||||
free(eh);
|
ecore_event_handler_mp_free(eh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,16 +7,6 @@
|
||||||
#include "Ecore.h"
|
#include "Ecore.h"
|
||||||
#include "ecore_private.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_enterers = NULL;
|
||||||
static Ecore_Idle_Enterer *idle_enterer_current = NULL;
|
static Ecore_Idle_Enterer *idle_enterer_current = NULL;
|
||||||
static int idle_enterers_delete_me = 0;
|
static int idle_enterers_delete_me = 0;
|
||||||
|
@ -49,7 +39,7 @@ ecore_idle_enterer_add(Ecore_Task_Cb func,
|
||||||
_ecore_lock();
|
_ecore_lock();
|
||||||
|
|
||||||
if (!func) goto unlock;
|
if (!func) goto unlock;
|
||||||
ie = calloc(1, sizeof(Ecore_Idle_Enterer));
|
ie = ecore_idle_enterer_calloc(1);
|
||||||
if (!ie) goto unlock;
|
if (!ie) goto unlock;
|
||||||
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER);
|
||||||
ie->func = func;
|
ie->func = func;
|
||||||
|
@ -79,7 +69,7 @@ ecore_idle_enterer_before_add(Ecore_Task_Cb func,
|
||||||
_ecore_lock();
|
_ecore_lock();
|
||||||
|
|
||||||
if (!func) goto unlock;
|
if (!func) goto unlock;
|
||||||
ie = calloc(1, sizeof(Ecore_Idle_Enterer));
|
ie = ecore_idle_enterer_calloc(1);
|
||||||
if (!ie) goto unlock;
|
if (!ie) goto unlock;
|
||||||
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER);
|
||||||
ie->func = func;
|
ie->func = func;
|
||||||
|
@ -134,7 +124,7 @@ _ecore_idle_enterer_shutdown(void)
|
||||||
{
|
{
|
||||||
idle_enterers = (Ecore_Idle_Enterer *)eina_inlist_remove(EINA_INLIST_GET(idle_enterers), EINA_INLIST_GET(idle_enterers));
|
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);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
||||||
free(ie);
|
ecore_idle_enterer_mp_free(ie);
|
||||||
}
|
}
|
||||||
idle_enterers_delete_me = 0;
|
idle_enterers_delete_me = 0;
|
||||||
idle_enterer_current = NULL;
|
idle_enterer_current = NULL;
|
||||||
|
@ -190,7 +180,7 @@ _ecore_idle_enterer_call(void)
|
||||||
|
|
||||||
idle_enterers = (Ecore_Idle_Enterer *)eina_inlist_remove(EINA_INLIST_GET(idle_enterers), EINA_INLIST_GET(ie));
|
idle_enterers = (Ecore_Idle_Enterer *)eina_inlist_remove(EINA_INLIST_GET(idle_enterers), EINA_INLIST_GET(ie));
|
||||||
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
||||||
free(ie);
|
ecore_idle_enterer_mp_free(ie);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!deleted_idler_enterers_in_use)
|
if (!deleted_idler_enterers_in_use)
|
||||||
|
|
|
@ -7,16 +7,6 @@
|
||||||
#include "Ecore.h"
|
#include "Ecore.h"
|
||||||
#include "ecore_private.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_exiters = NULL;
|
||||||
static Ecore_Idle_Exiter *idle_exiter_current = NULL;
|
static Ecore_Idle_Exiter *idle_exiter_current = NULL;
|
||||||
static int idle_exiters_delete_me = 0;
|
static int idle_exiters_delete_me = 0;
|
||||||
|
@ -47,7 +37,7 @@ ecore_idle_exiter_add(Ecore_Task_Cb func,
|
||||||
|
|
||||||
_ecore_lock();
|
_ecore_lock();
|
||||||
if (!func) goto unlock;
|
if (!func) goto unlock;
|
||||||
ie = calloc(1, sizeof(Ecore_Idle_Exiter));
|
ie = ecore_idle_exiter_calloc(1);
|
||||||
if (!ie) goto unlock;
|
if (!ie) goto unlock;
|
||||||
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_EXITER);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_EXITER);
|
||||||
ie->func = func;
|
ie->func = func;
|
||||||
|
@ -102,7 +92,7 @@ _ecore_idle_exiter_shutdown(void)
|
||||||
{
|
{
|
||||||
idle_exiters = (Ecore_Idle_Exiter *)eina_inlist_remove(EINA_INLIST_GET(idle_exiters), EINA_INLIST_GET(idle_exiters));
|
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);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
||||||
free(ie);
|
ecore_idle_exiter_mp_free(ie);
|
||||||
}
|
}
|
||||||
idle_exiters_delete_me = 0;
|
idle_exiters_delete_me = 0;
|
||||||
idle_exiter_current = NULL;
|
idle_exiter_current = NULL;
|
||||||
|
@ -159,7 +149,7 @@ _ecore_idle_exiter_call(void)
|
||||||
|
|
||||||
idle_exiters = (Ecore_Idle_Exiter *)eina_inlist_remove(EINA_INLIST_GET(idle_exiters), EINA_INLIST_GET(ie));
|
idle_exiters = (Ecore_Idle_Exiter *)eina_inlist_remove(EINA_INLIST_GET(idle_exiters), EINA_INLIST_GET(ie));
|
||||||
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
||||||
free(ie);
|
ecore_idle_exiter_mp_free(ie);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!deleted_idler_exiters_in_use)
|
if (!deleted_idler_exiters_in_use)
|
||||||
|
|
|
@ -7,16 +7,6 @@
|
||||||
#include "Ecore.h"
|
#include "Ecore.h"
|
||||||
#include "ecore_private.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 *idlers = NULL;
|
||||||
static Ecore_Idler *idler_current = NULL;
|
static Ecore_Idler *idler_current = NULL;
|
||||||
static int idlers_delete_me = 0;
|
static int idlers_delete_me = 0;
|
||||||
|
@ -32,7 +22,7 @@ ecore_idler_add(Ecore_Task_Cb func,
|
||||||
|
|
||||||
_ecore_lock();
|
_ecore_lock();
|
||||||
if (!func) goto unlock;
|
if (!func) goto unlock;
|
||||||
ie = calloc(1, sizeof(Ecore_Idler));
|
ie = ecore_idler_calloc(1);
|
||||||
if (!ie) goto unlock;
|
if (!ie) goto unlock;
|
||||||
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLER);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLER);
|
||||||
ie->func = func;
|
ie->func = func;
|
||||||
|
@ -86,7 +76,7 @@ _ecore_idler_shutdown(void)
|
||||||
{
|
{
|
||||||
idlers = (Ecore_Idler *)eina_inlist_remove(EINA_INLIST_GET(idlers), EINA_INLIST_GET(idlers));
|
idlers = (Ecore_Idler *)eina_inlist_remove(EINA_INLIST_GET(idlers), EINA_INLIST_GET(idlers));
|
||||||
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
||||||
free(ie);
|
ecore_idler_mp_free(ie);
|
||||||
}
|
}
|
||||||
idlers_delete_me = 0;
|
idlers_delete_me = 0;
|
||||||
idler_current = NULL;
|
idler_current = NULL;
|
||||||
|
@ -139,7 +129,7 @@ _ecore_idler_all_call(void)
|
||||||
|
|
||||||
idlers = (Ecore_Idler *)eina_inlist_remove(EINA_INLIST_GET(idlers), EINA_INLIST_GET(ie));
|
idlers = (Ecore_Idler *)eina_inlist_remove(EINA_INLIST_GET(idlers), EINA_INLIST_GET(ie));
|
||||||
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
|
||||||
free(ie);
|
ecore_idler_mp_free(ie);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!deleted_idlers_in_use)
|
if (!deleted_idlers_in_use)
|
||||||
|
|
|
@ -16,14 +16,6 @@ static void _ecore_job_event_free(void *data,
|
||||||
static int ecore_event_job_type = 0;
|
static int ecore_event_job_type = 0;
|
||||||
static Ecore_Event_Handler *_ecore_job_handler = NULL;
|
static Ecore_Event_Handler *_ecore_job_handler = NULL;
|
||||||
|
|
||||||
struct _Ecore_Job
|
|
||||||
{
|
|
||||||
ECORE_MAGIC;
|
|
||||||
Ecore_Event *event;
|
|
||||||
Ecore_Cb func;
|
|
||||||
void *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_ecore_job_init(void)
|
_ecore_job_init(void)
|
||||||
{
|
{
|
||||||
|
@ -61,13 +53,13 @@ ecore_job_add(Ecore_Cb func,
|
||||||
|
|
||||||
if (!func) return NULL;
|
if (!func) return NULL;
|
||||||
|
|
||||||
job = calloc(1, sizeof(Ecore_Job));
|
job = ecore_job_calloc(1);
|
||||||
if (!job) return NULL;
|
if (!job) return NULL;
|
||||||
ECORE_MAGIC_SET(job, ECORE_MAGIC_JOB);
|
ECORE_MAGIC_SET(job, ECORE_MAGIC_JOB);
|
||||||
job->event = ecore_event_add(ecore_event_job_type, job, _ecore_job_event_free, NULL);
|
job->event = ecore_event_add(ecore_event_job_type, job, _ecore_job_event_free, NULL);
|
||||||
if (!job->event)
|
if (!job->event)
|
||||||
{
|
{
|
||||||
free(job);
|
ecore_job_mp_free(job);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
job->func = func;
|
job->func = func;
|
||||||
|
@ -115,8 +107,8 @@ _ecore_job_event_handler(void *data __UNUSED__,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_job_event_free(void *data __UNUSED__,
|
_ecore_job_event_free(void *data __UNUSED__,
|
||||||
void *ev)
|
void *job)
|
||||||
{
|
{
|
||||||
free(ev);
|
ecore_job_mp_free(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,42 +145,6 @@ timerfd_settime(int fd __UNUSED__,
|
||||||
|
|
||||||
#define NS_PER_SEC (1000.0 * 1000.0 * 1000.0)
|
#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
|
#ifndef USE_G_MAIN_LOOP
|
||||||
static int _ecore_main_select(double timeout);
|
static int _ecore_main_select(double timeout);
|
||||||
#endif
|
#endif
|
||||||
|
@ -990,7 +954,7 @@ ecore_main_fd_handler_add(int fd,
|
||||||
|
|
||||||
if ((fd < 0) || (flags == 0) || (!func)) goto unlock;
|
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;
|
if (!fdh) goto unlock;
|
||||||
ECORE_MAGIC_SET(fdh, ECORE_MAGIC_FD_HANDLER);
|
ECORE_MAGIC_SET(fdh, ECORE_MAGIC_FD_HANDLER);
|
||||||
fdh->next_ready = NULL;
|
fdh->next_ready = NULL;
|
||||||
|
@ -1000,7 +964,7 @@ ecore_main_fd_handler_add(int fd,
|
||||||
{
|
{
|
||||||
int err = errno;
|
int err = errno;
|
||||||
ERR("Failed to add poll on fd %d (errno = %d: %s)!", fd, err, strerror(err));
|
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;
|
fdh = NULL;
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
@ -1033,7 +997,7 @@ ecore_main_win32_handler_add(void *h,
|
||||||
|
|
||||||
if (!h || !func) return NULL;
|
if (!h || !func) return NULL;
|
||||||
|
|
||||||
wh = calloc(1, sizeof(Ecore_Win32_Handler));
|
wh = ecore_win32_handler_calloc(1);
|
||||||
if (!wh) return NULL;
|
if (!wh) return NULL;
|
||||||
ECORE_MAGIC_SET(wh, ECORE_MAGIC_WIN32_HANDLER);
|
ECORE_MAGIC_SET(wh, ECORE_MAGIC_WIN32_HANDLER);
|
||||||
wh->h = (HANDLE)h;
|
wh->h = (HANDLE)h;
|
||||||
|
@ -1263,7 +1227,7 @@ _ecore_main_shutdown(void)
|
||||||
fd_handlers = (Ecore_Fd_Handler *)eina_inlist_remove(EINA_INLIST_GET(fd_handlers),
|
fd_handlers = (Ecore_Fd_Handler *)eina_inlist_remove(EINA_INLIST_GET(fd_handlers),
|
||||||
EINA_INLIST_GET(fdh));
|
EINA_INLIST_GET(fdh));
|
||||||
ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
|
||||||
free(fdh);
|
ecore_fd_handler_mp_free(fdh);
|
||||||
}
|
}
|
||||||
if (fd_handlers_with_buffer)
|
if (fd_handlers_with_buffer)
|
||||||
fd_handlers_with_buffer = eina_list_free(fd_handlers_with_buffer);
|
fd_handlers_with_buffer = eina_list_free(fd_handlers_with_buffer);
|
||||||
|
@ -1286,7 +1250,7 @@ _ecore_main_shutdown(void)
|
||||||
win32_handlers = (Ecore_Win32_Handler *)eina_inlist_remove(EINA_INLIST_GET(win32_handlers),
|
win32_handlers = (Ecore_Win32_Handler *)eina_inlist_remove(EINA_INLIST_GET(win32_handlers),
|
||||||
EINA_INLIST_GET(wh));
|
EINA_INLIST_GET(wh));
|
||||||
ECORE_MAGIC_SET(wh, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(wh, ECORE_MAGIC_NONE);
|
||||||
free(wh);
|
ecore_win32_handler_mp_free(wh);
|
||||||
}
|
}
|
||||||
win32_handlers_delete_me = EINA_FALSE;
|
win32_handlers_delete_me = EINA_FALSE;
|
||||||
win32_handler_current = NULL;
|
win32_handler_current = NULL;
|
||||||
|
@ -1527,7 +1491,7 @@ _ecore_main_fd_handlers_cleanup(void)
|
||||||
fd_handlers = (Ecore_Fd_Handler *)
|
fd_handlers = (Ecore_Fd_Handler *)
|
||||||
eina_inlist_remove(EINA_INLIST_GET(fd_handlers), EINA_INLIST_GET(fdh));
|
eina_inlist_remove(EINA_INLIST_GET(fd_handlers), EINA_INLIST_GET(fdh));
|
||||||
ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
|
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);
|
fd_handlers_to_delete = eina_list_remove_list(fd_handlers_to_delete, l);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1558,7 +1522,7 @@ _ecore_main_win32_handlers_cleanup(void)
|
||||||
eina_inlist_remove(EINA_INLIST_GET(win32_handlers),
|
eina_inlist_remove(EINA_INLIST_GET(win32_handlers),
|
||||||
EINA_INLIST_GET(wh));
|
EINA_INLIST_GET(wh));
|
||||||
ECORE_MAGIC_SET(wh, ECORE_MAGIC_NONE);
|
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;
|
if (!deleted_in_use) win32_handlers_delete_me = EINA_FALSE;
|
||||||
|
|
|
@ -80,21 +80,6 @@
|
||||||
|
|
||||||
#endif /* ! _WIN32 */
|
#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,
|
static Eina_Bool _ecore_pipe_read(void *data,
|
||||||
Ecore_Fd_Handler *fd_handler);
|
Ecore_Fd_Handler *fd_handler);
|
||||||
|
@ -125,12 +110,12 @@ ecore_pipe_add(Ecore_Pipe_Cb handler,
|
||||||
|
|
||||||
if (!handler) return NULL;
|
if (!handler) return NULL;
|
||||||
|
|
||||||
p = (Ecore_Pipe *)calloc(1, sizeof(Ecore_Pipe));
|
p = ecore_pipe_calloc(1);
|
||||||
if (!p) return NULL;
|
if (!p) return NULL;
|
||||||
|
|
||||||
if (pipe(fds))
|
if (pipe(fds))
|
||||||
{
|
{
|
||||||
free(p);
|
ecore_pipe_mp_free(p);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,7 +156,7 @@ ecore_pipe_del(Ecore_Pipe *p)
|
||||||
if (p->fd_read != PIPE_FD_INVALID) pipe_close(p->fd_read);
|
if (p->fd_read != PIPE_FD_INVALID) pipe_close(p->fd_read);
|
||||||
if (p->fd_write != PIPE_FD_INVALID) pipe_close(p->fd_write);
|
if (p->fd_write != PIPE_FD_INVALID) pipe_close(p->fd_write);
|
||||||
data = (void *)p->data;
|
data = (void *)p->data;
|
||||||
free(p);
|
ecore_pipe_mp_free(p);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,16 +7,6 @@
|
||||||
#include "Ecore.h"
|
#include "Ecore.h"
|
||||||
#include "ecore_private.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 Ecore_Timer *timer = NULL;
|
||||||
static int min_interval = -1;
|
static int min_interval = -1;
|
||||||
static int interval_incr = 0;
|
static int interval_incr = 0;
|
||||||
|
@ -159,7 +149,7 @@ _ecore_poller_cb_timer(void *data __UNUSED__)
|
||||||
if (poller->delete_me)
|
if (poller->delete_me)
|
||||||
{
|
{
|
||||||
pollers[i] = (Ecore_Poller *)eina_inlist_remove(EINA_INLIST_GET(pollers[i]), EINA_INLIST_GET(poller));
|
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--;
|
poller_delete_count--;
|
||||||
changes++;
|
changes++;
|
||||||
if (poller_delete_count <= 0) break;
|
if (poller_delete_count <= 0) break;
|
||||||
|
@ -281,7 +271,7 @@ ecore_poller_add(Ecore_Poller_Type type __UNUSED__,
|
||||||
if (!func) return NULL;
|
if (!func) return NULL;
|
||||||
if (interval < 1) interval = 1;
|
if (interval < 1) interval = 1;
|
||||||
|
|
||||||
poller = calloc(1, sizeof(Ecore_Poller));
|
poller = ecore_poller_calloc(1);
|
||||||
if (!poller) return NULL;
|
if (!poller) return NULL;
|
||||||
ECORE_MAGIC_SET(poller, ECORE_MAGIC_POLLER);
|
ECORE_MAGIC_SET(poller, ECORE_MAGIC_POLLER);
|
||||||
/* interval MUST be a power of 2, so enforce it */
|
/* interval MUST be a power of 2, so enforce it */
|
||||||
|
@ -413,7 +403,7 @@ ecore_poller_del(Ecore_Poller *poller)
|
||||||
/* not in loop so safe - delete immediately */
|
/* not in loop so safe - delete immediately */
|
||||||
data = poller->data;
|
data = poller->data;
|
||||||
pollers[poller->ibit] = (Ecore_Poller *)eina_inlist_remove(EINA_INLIST_GET(pollers[poller->ibit]), EINA_INLIST_GET(poller));
|
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();
|
_ecore_poller_next_tick_eval();
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -433,7 +423,7 @@ _ecore_poller_shutdown(void)
|
||||||
while ((poller = pollers[i]))
|
while ((poller = pollers[i]))
|
||||||
{
|
{
|
||||||
pollers[i] = (Ecore_Poller *)eina_inlist_remove(EINA_INLIST_GET(pollers[i]), EINA_INLIST_GET(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,12 +79,15 @@ extern int _ecore_log_dom;
|
||||||
#define ECORE_MAGIC_WIN32_HANDLER 0xf7e8f1a3
|
#define ECORE_MAGIC_WIN32_HANDLER 0xf7e8f1a3
|
||||||
#define ECORE_MAGIC_JOB 0x76543210
|
#define ECORE_MAGIC_JOB 0x76543210
|
||||||
|
|
||||||
|
typedef unsigned int Ecore_Magic;
|
||||||
#define ECORE_MAGIC Ecore_Magic __magic
|
#define ECORE_MAGIC Ecore_Magic __magic
|
||||||
|
|
||||||
#define ECORE_MAGIC_SET(d, m) (d)->__magic = (m)
|
#define ECORE_MAGIC_SET(d, m) (d)->__magic = (m)
|
||||||
#define ECORE_MAGIC_CHECK(d, m) ((d) && ((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));
|
#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 the following, we want our version */
|
||||||
#undef FREE
|
#undef FREE
|
||||||
#define FREE(ptr) free(ptr); ptr = NULL;
|
#define FREE(ptr) free(ptr); ptr = NULL;
|
||||||
|
@ -116,8 +119,6 @@ ecore_print_warning(const char *function,
|
||||||
return; \
|
return; \
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef unsigned int Ecore_Magic;
|
|
||||||
|
|
||||||
EAPI void _ecore_magic_fail(const void *d,
|
EAPI void _ecore_magic_fail(const void *d,
|
||||||
Ecore_Magic m,
|
Ecore_Magic m,
|
||||||
Ecore_Magic req_m,
|
Ecore_Magic req_m,
|
||||||
|
@ -350,4 +351,26 @@ extern double _ecore_time_loop_time;
|
||||||
extern Eina_Bool _ecore_glib_always_integrate;
|
extern Eina_Bool _ecore_glib_always_integrate;
|
||||||
extern Ecore_Select_Function main_loop_select;
|
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
|
#endif
|
||||||
|
|
|
@ -8,34 +8,6 @@
|
||||||
#include "Ecore.h"
|
#include "Ecore.h"
|
||||||
#include "ecore_private.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,
|
static void _ecore_timer_set(Ecore_Timer *timer,
|
||||||
double at,
|
double at,
|
||||||
double in,
|
double in,
|
||||||
|
@ -140,7 +112,7 @@ ecore_timer_add(double in,
|
||||||
_ecore_lock();
|
_ecore_lock();
|
||||||
if (!func) goto unlock;
|
if (!func) goto unlock;
|
||||||
if (in < 0.0) in = 0.0;
|
if (in < 0.0) in = 0.0;
|
||||||
timer = calloc(1, sizeof(Ecore_Timer));
|
timer = ecore_timer_calloc(1);
|
||||||
if (!timer) goto unlock;
|
if (!timer) goto unlock;
|
||||||
ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER);
|
ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER);
|
||||||
now = ecore_time_get();
|
now = ecore_time_get();
|
||||||
|
@ -470,7 +442,7 @@ _ecore_timer_loop_add(double in,
|
||||||
|
|
||||||
if (!func) return timer;
|
if (!func) return timer;
|
||||||
if (in < 0.0) in = 0.0;
|
if (in < 0.0) in = 0.0;
|
||||||
timer = calloc(1, sizeof(Ecore_Timer));
|
timer = ecore_timer_calloc(1);
|
||||||
if (!timer) return timer;
|
if (!timer) return timer;
|
||||||
ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER);
|
ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER);
|
||||||
now = ecore_loop_time_get();
|
now = ecore_loop_time_get();
|
||||||
|
@ -510,7 +482,7 @@ _ecore_timer_del(Ecore_Timer *timer)
|
||||||
if (timer->delete_me)
|
if (timer->delete_me)
|
||||||
timers_delete_me--;
|
timers_delete_me--;
|
||||||
|
|
||||||
free(timer);
|
ecore_timer_mp_free(timer);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -529,14 +501,14 @@ _ecore_timer_shutdown(void)
|
||||||
{
|
{
|
||||||
timers = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(timers), EINA_INLIST_GET(timers));
|
timers = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(timers), EINA_INLIST_GET(timers));
|
||||||
ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
|
||||||
free(timer);
|
ecore_timer_mp_free(timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((timer = suspended))
|
while ((timer = suspended))
|
||||||
{
|
{
|
||||||
suspended = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(suspended), EINA_INLIST_GET(suspended));
|
suspended = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(suspended), EINA_INLIST_GET(suspended));
|
||||||
ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
|
||||||
free(timer);
|
ecore_timer_mp_free(timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
timer_current = NULL;
|
timer_current = NULL;
|
||||||
|
@ -563,7 +535,7 @@ _ecore_timer_cleanup(void)
|
||||||
}
|
}
|
||||||
timers = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(timers), EINA_INLIST_GET(timer));
|
timers = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(timers), EINA_INLIST_GET(timer));
|
||||||
ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
|
||||||
free(timer);
|
ecore_timer_mp_free(timer);
|
||||||
timers_delete_me--;
|
timers_delete_me--;
|
||||||
done++;
|
done++;
|
||||||
if (timers_delete_me == 0) return;
|
if (timers_delete_me == 0) return;
|
||||||
|
@ -583,7 +555,7 @@ _ecore_timer_cleanup(void)
|
||||||
}
|
}
|
||||||
suspended = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(suspended), EINA_INLIST_GET(timer));
|
suspended = (Ecore_Timer *)eina_inlist_remove(EINA_INLIST_GET(suspended), EINA_INLIST_GET(timer));
|
||||||
ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
|
||||||
free(timer);
|
ecore_timer_mp_free(timer);
|
||||||
timers_delete_me--;
|
timers_delete_me--;
|
||||||
done++;
|
done++;
|
||||||
if (timers_delete_me == 0) return;
|
if (timers_delete_me == 0) return;
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
#ifndef ECORE_TYPES_H
|
||||||
|
#define ECORE_TYPES_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_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;
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Ecore_Idle_Enterer
|
||||||
|
{
|
||||||
|
EINA_INLIST;
|
||||||
|
ECORE_MAGIC;
|
||||||
|
Ecore_Task_Cb func;
|
||||||
|
void *data;
|
||||||
|
int references;
|
||||||
|
Eina_Bool delete_me : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Ecore_Idle_Exiter
|
||||||
|
{
|
||||||
|
EINA_INLIST;
|
||||||
|
ECORE_MAGIC;
|
||||||
|
Ecore_Task_Cb func;
|
||||||
|
void *data;
|
||||||
|
int references;
|
||||||
|
Eina_Bool delete_me : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Ecore_Idler
|
||||||
|
{
|
||||||
|
EINA_INLIST;
|
||||||
|
ECORE_MAGIC;
|
||||||
|
Ecore_Task_Cb func;
|
||||||
|
void *data;
|
||||||
|
int references;
|
||||||
|
Eina_Bool delete_me : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Ecore_Job
|
||||||
|
{
|
||||||
|
ECORE_MAGIC;
|
||||||
|
Ecore_Event *event;
|
||||||
|
Ecore_Cb func;
|
||||||
|
void *data;
|
||||||
|
};
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Ecore_Poller
|
||||||
|
{
|
||||||
|
EINA_INLIST;
|
||||||
|
ECORE_MAGIC;
|
||||||
|
int ibit;
|
||||||
|
unsigned char delete_me : 1;
|
||||||
|
Ecore_Task_Cb func;
|
||||||
|
void *data;
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue