From: Enlightenment S. <no-...@en...> - 2011-07-05 04:08:07
|
Log: diable fix_hz - little need for that these days. i almost forgot that this existed! Author: raster Date: 2011-07-04 21:08:01 -0700 (Mon, 04 Jul 2011) New Revision: 61030 Trac: http://trac.enlightenment.org/e/changeset/61030 Modified: trunk/ecore/src/lib/ecore/ecore_main.c Modified: trunk/ecore/src/lib/ecore/ecore_main.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_main.c 2011-07-05 03:28:06 UTC (rev 61029) +++ trunk/ecore/src/lib/ecore/ecore_main.c 2011-07-05 04:08:01 UTC (rev 61030) @@ -40,7 +40,7 @@ # endif #endif -#define FIX_HZ 1 +//#define FIX_HZ 1 #ifdef FIX_HZ # ifndef _MSC_VER |
From: Enlightenment S. <no-...@en...> - 2011-07-18 10:34:35
|
Log: 0 byte sreads are not so important - try again next time. Author: raster Date: 2011-07-18 03:34:25 -0700 (Mon, 18 Jul 2011) New Revision: 61477 Trac: http://trac.enlightenment.org/e/changeset/61477 Modified: trunk/ecore/src/lib/ecore/ecore_pipe.c Modified: trunk/ecore/src/lib/ecore/ecore_pipe.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_pipe.c 2011-07-18 09:26:36 UTC (rev 61476) +++ trunk/ecore/src/lib/ecore/ecore_pipe.c 2011-07-18 10:34:25 UTC (rev 61477) @@ -513,19 +513,29 @@ } else if (ret == 0) { - /* we got no data even though we had data to read */ - if (!p->delete_me) - p->handler((void *)p->data, NULL, 0); - if (p->passed_data) free(p->passed_data); - p->passed_data = NULL; - p->already_read = 0; - p->len = 0; - p->message++; - pipe_close(p->fd_read); - p->fd_read = PIPE_FD_INVALID; - p->fd_handler = NULL; - _ecore_pipe_unhandle(p); - return ECORE_CALLBACK_CANCEL; + /* we got no data */ + if (i == 0) + { + /* no data on first try through means an error */ + if (!p->delete_me) + p->handler((void *)p->data, NULL, 0); + if (p->passed_data) free(p->passed_data); + p->passed_data = NULL; + p->already_read = 0; + p->len = 0; + p->message++; + pipe_close(p->fd_read); + p->fd_read = PIPE_FD_INVALID; + p->fd_handler = NULL; + _ecore_pipe_unhandle(p); + return ECORE_CALLBACK_CANCEL; + } + else + { + /* no data after first loop try is ok */ + _ecore_pipe_unhandle(p); + return ECORE_CALLBACK_RENEW; + } } #ifndef _WIN32 else if ((ret == PIPE_FD_ERROR) && @@ -565,11 +575,12 @@ } /* if somehow we got less than or equal to 0 we got an errnoneous - * messages so call callback with null and len we got */ - if (p->len <= 0) + * messages so call callback with null and len we got. this case should + * never happen */ + if (p->len == 0) { if (!p->delete_me) - p->handler((void *)p->data, NULL, p->len); + p->handler((void *)p->data, NULL, 0); /* reset all values to 0 */ if (p->passed_data) free(p->passed_data); p->passed_data = NULL; @@ -628,19 +639,9 @@ } else if (ret == 0) { - /* 0 bytes available when woken up to handle read - error */ - if (!p->delete_me) - p->handler((void *)p->data, NULL, 0); - if (p->passed_data) free(p->passed_data); - p->passed_data = NULL; - p->already_read = 0; - p->len = 0; - p->message++; - pipe_close(p->fd_read); - p->fd_read = PIPE_FD_INVALID; - p->fd_handler = NULL; + /* 0 bytes to read - could be more to read next select wake up */ _ecore_pipe_unhandle(p); - return ECORE_CALLBACK_CANCEL; + return ECORE_CALLBACK_RENEW; } #ifndef _WIN32 else if ((ret == PIPE_FD_ERROR) && |
From: Enlightenment S. <no-...@en...> - 2011-08-08 11:29:13
|
Log: remove some docs on compiling goop we don't need really. Author: raster Date: 2011-08-08 04:29:05 -0700 (Mon, 08 Aug 2011) New Revision: 62200 Trac: http://trac.enlightenment.org/e/changeset/62200 Modified: trunk/ecore/src/lib/ecore/Ecore.h Modified: trunk/ecore/src/lib/ecore/Ecore.h =================================================================== --- trunk/ecore/src/lib/ecore/Ecore.h 2011-08-08 11:20:30 UTC (rev 62199) +++ trunk/ecore/src/lib/ecore/Ecore.h 2011-08-08 11:29:05 UTC (rev 62200) @@ -47,16 +47,12 @@ @verbatim ./configure \ ---enable-ecore-x \ ---enable-ecore-fb \ ---enable-ecore-evas \ ---enable-ecore-evas-gl \ ---enable-ecore-con \ ---enable-ecore-ipc -make CFLAGS="-O9 -mpentiumpro -march=pentiumpro -mcpu=pentiumpro" +make +su - +... +make install @endverbatim -@todo (1.0) Document API */ /** |
From: Enlightenment S. <no-...@en...> - 2011-08-08 11:31:13
|
Log: doc - we dont really need the logo there. Author: raster Date: 2011-08-08 04:31:07 -0700 (Mon, 08 Aug 2011) New Revision: 62201 Trac: http://trac.enlightenment.org/e/changeset/62201 Modified: trunk/ecore/src/lib/ecore/Ecore.h Modified: trunk/ecore/src/lib/ecore/Ecore.h =================================================================== --- trunk/ecore/src/lib/ecore/Ecore.h 2011-08-08 11:29:05 UTC (rev 62200) +++ trunk/ecore/src/lib/ecore/Ecore.h 2011-08-08 11:31:07 UTC (rev 62201) @@ -8,8 +8,6 @@ @mainpage Ecore -@image html e.png - @version 1.1 @date 2000-2011 |
From: Enlightenment S. <no-...@en...> - 2011-08-20 05:03:20
|
Log: ummm mike -> need to unlock and lock - calling ecore_timer_add inside a lock already. unless u want to make both external and internal call versions. Author: raster Date: 2011-08-19 22:03:13 -0700 (Fri, 19 Aug 2011) New Revision: 62619 Trac: http://trac.enlightenment.org/e/changeset/62619 Modified: trunk/ecore/src/lib/ecore/ecore_signal.c Modified: trunk/ecore/src/lib/ecore/ecore_signal.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_signal.c 2011-08-20 04:54:29 UTC (rev 62618) +++ trunk/ecore/src/lib/ecore/ecore_signal.c 2011-08-20 05:03:13 UTC (rev 62619) @@ -192,7 +192,11 @@ doomsday_clock = _ecore_exe_doomsday_clock_get(e->exe); IF_FN_DEL(ecore_timer_del, doomsday_clock); - _ecore_exe_doomsday_clock_set(e->exe, ecore_timer_add(0.1, _ecore_signal_exe_exit_delay, e)); + _ecore_unlock(); + doomsday_clock = ecore_timer_add + (0.1, _ecore_signal_exe_exit_delay, e); + _ecore_lock(); + _ecore_exe_doomsday_clock_set(e->exe, doomsday_clock); } else { |
From: Enlightenment S. <no-...@en...> - 2011-08-22 09:32:45
|
Log: we dont need 1 if level in ecore mainloop. it really isn't needed. been harmless though. Author: raster Date: 2011-08-22 02:32:39 -0700 (Mon, 22 Aug 2011) New Revision: 62682 Trac: http://trac.enlightenment.org/e/changeset/62682 Modified: trunk/ecore/src/lib/ecore/ecore_main.c Modified: trunk/ecore/src/lib/ecore/ecore_main.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_main.c 2011-08-22 09:24:43 UTC (rev 62681) +++ trunk/ecore/src/lib/ecore/ecore_main.c 2011-08-22 09:32:39 UTC (rev 62682) @@ -1678,67 +1678,65 @@ _ecore_timer_enable_new(); return; } - if (!_ecore_event_exist()) + /* init flags */ + have_event = have_signal = 0; + next_time = _ecore_timer_next_get(); + /* no timers */ + if (next_time < 0) { - /* init flags */ - have_event = have_signal = 0; - next_time = _ecore_timer_next_get(); - /* no timers */ - if (next_time < 0) + /* no idlers */ + if (!_ecore_idler_exist()) { - /* no idlers */ - if (!_ecore_idler_exist()) + if (_ecore_main_select(-1.0) > 0) have_event = 1; + } + /* idlers */ + else + { + for (;;) { - if (_ecore_main_select(-1.0) > 0) have_event = 1; + _ecore_time_loop_time = ecore_time_get(); + if (!_ecore_idler_call()) goto start_loop; + if (_ecore_main_select(0.0) > 0) break; + if (_ecore_event_exist()) break; + if (_ecore_signal_count_get() > 0) break; + if (_ecore_timers_exists()) goto start_loop; + if (do_quit) break; } - /* idlers */ - else - { - for (;;) - { - _ecore_time_loop_time = ecore_time_get(); - if (!_ecore_idler_call()) goto start_loop; - if (_ecore_main_select(0.0) > 0) break; - if (_ecore_event_exist()) break; - if (_ecore_signal_count_get() > 0) break; - if (_ecore_timers_exists()) goto start_loop; - if (do_quit) break; - } - } } - /* timers */ + } + /* timers */ + else + { + /* no idlers */ + if (!_ecore_idler_exist()) + { + if (_ecore_main_select(next_time) > 0) have_event = 1; + } + /* idlers */ else { - /* no idlers */ - if (!_ecore_idler_exist()) + for (;;) { - if (_ecore_main_select(next_time) > 0) have_event = 1; + _ecore_time_loop_time = ecore_time_get(); + if (!_ecore_idler_call()) goto start_loop; + if (_ecore_main_select(0.0) > 0) break; + if (_ecore_event_exist()) break; + if (_ecore_signal_count_get() > 0) break; + if (have_event || have_signal) break; + next_time = _ecore_timer_next_get(); + if (next_time <= 0) break; + if (do_quit) break; } - /* idlers */ - else - { - for (;;) - { - _ecore_time_loop_time = ecore_time_get(); - if (!_ecore_idler_call()) goto start_loop; - if (_ecore_main_select(0.0) > 0) break; - if (_ecore_event_exist()) break; - if (_ecore_signal_count_get() > 0) break; - if (have_event || have_signal) break; - next_time = _ecore_timer_next_get(); - if (next_time <= 0) break; - if (do_quit) break; - } - } } } + if (_ecore_fps_debug) t1 = ecore_time_get(); /* we came out of our "wait state" so idle has exited */ + process_events: if (!once_only) _ecore_idle_exiter_call(); /* call the fd handler per fd that became alive... */ /* this should read or write any data to the monitored fd and then */ /* post events onto the ecore event pipe if necessary */ - process_events: _ecore_main_fd_handlers_call(); if (fd_handlers_with_buffer) _ecore_main_fd_handlers_buf_call(); |
From: Enlightenment S. <no-...@en...> - 2011-09-02 03:29:18
|
Log: mainloop cleanups on top of previous ones and fixes for previous refactors Author: raster Date: 2011-09-01 20:29:11 -0700 (Thu, 01 Sep 2011) New Revision: 63082 Trac: http://trac.enlightenment.org/e/changeset/63082 Modified: trunk/ecore/src/lib/ecore/ecore_idler.c trunk/ecore/src/lib/ecore/ecore_main.c trunk/ecore/src/lib/ecore/ecore_private.h trunk/ecore/src/lib/ecore/ecore_signal.c trunk/ecore/src/lib/ecore/ecore_timer.c Modified: trunk/ecore/src/lib/ecore/ecore_idler.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_idler.c 2011-09-02 01:35:16 UTC (rev 63081) +++ trunk/ecore/src/lib/ecore/ecore_idler.c 2011-09-02 03:29:11 UTC (rev 63082) @@ -95,7 +95,7 @@ } int -_ecore_idler_call(void) +_ecore_idler_all_call(void) { if (!idler_current) { Modified: trunk/ecore/src/lib/ecore/ecore_main.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_main.c 2011-09-02 01:35:16 UTC (rev 63081) +++ trunk/ecore/src/lib/ecore/ecore_main.c 2011-09-02 03:29:11 UTC (rev 63082) @@ -494,7 +494,7 @@ if (!ecore_idling && !_ecore_glib_idle_enterer_called) { _ecore_time_loop_time = ecore_time_get(); - while (_ecore_timer_call(_ecore_time_loop_time)); + _ecore_timer_expired_timers_call(_ecore_time_loop_time); _ecore_timer_cleanup(); _ecore_idle_enterer_call(); @@ -505,7 +505,7 @@ _ecore_main_fd_handlers_buf_call(); } - while (_ecore_signal_count_get()) _ecore_signal_call(); + _ecore_signal_received_process(); /* don't check fds if somebody quit */ if (g_main_loop_is_running(ecore_main_loop)) @@ -673,11 +673,11 @@ _ecore_main_fd_handlers_call(); if (fd_handlers_with_buffer) _ecore_main_fd_handlers_buf_call(); - while (_ecore_signal_count_get()) _ecore_signal_call(); + _ecore_signal_received_process(); _ecore_event_call(); _ecore_main_fd_handlers_cleanup(); - while (_ecore_timer_call(_ecore_time_loop_time)); + _ecore_timer_expired_timers_call(_ecore_time_loop_time); _ecore_timer_cleanup(); _ecore_idle_enterer_call(); @@ -1600,157 +1600,207 @@ } #ifndef USE_G_MAIN_LOOP + +enum { + SPIN_MORE, + SPIN_RESTART, + LOOP_CONTINUE +}; + +static int +_ecore_main_loop_spin_core(void) +{ + /* as we are spinning we need to update loop time per spin */ + _ecore_time_loop_time = ecore_time_get(); + /* call all idlers, which returns false if no more idelrs exist */ + if (!_ecore_idler_all_call()) return SPIN_RESTART; + /* sneaky - drop through or if checks - the first one to succeed + * drops through and returns "continue" so further ones dont run */ + if ((_ecore_main_select(0.0) > 0) || (_ecore_event_exist()) || + (_ecore_signal_count_get() > 0) || (do_quit)) + return LOOP_CONTINUE; + /* default - spin more */ + return SPIN_MORE; +} + +static int +_ecore_main_loop_spin_no_timers(void) +{ + /* if we have idlers we HAVE to spin and handle everything + * in a polling way - spin in a tight polling loop */ + for (;;) + { + int action = _ecore_main_loop_spin_core(); + if (action != SPIN_MORE) return action; + /* if an idler has added a timer then we need to go through + * the start of the spin cycle again to handle cases properly */ + if (_ecore_timers_exists()) return SPIN_RESTART; + } + /* just contiune handling events etc. */ + return LOOP_CONTINUE; +} + +static int +_ecore_main_loop_spin_timers(void) +{ + /* if we have idlers we HAVE to spin and handle everything + * in a polling way - spin in a tight polling loop */ + for (;;) + { + int action = _ecore_main_loop_spin_core(); + if (action != SPIN_MORE) return action; + /* if next timer expires now or in the past - stop spinning and + * continue the mainloop walk as our "select" timeout has + * expired now */ + if (_ecore_timer_next_get() <= 0.0) return LOOP_CONTINUE; + } + /* just contiune handling events etc. */ + return LOOP_CONTINUE; +} + static void +_ecore_fps_marker_1(void) +{ + if (!_ecore_fps_debug) return; + t2 = ecore_time_get(); + if ((t1 > 0.0) && (t2 > 0.0)) _ecore_fps_debug_runtime_add(t2 - t1); +} + +static void +_ecore_fps_marker_2(void) +{ + if (!_ecore_fps_debug) return; + t1 = ecore_time_get(); +} + +static void _ecore_main_loop_iterate_internal(int once_only) { double next_time = -1.0; - int have_event = 0; - int have_signal; in_main_loop++; /* expire any timers */ - while (_ecore_timer_call(_ecore_time_loop_time)); + _ecore_timer_expired_timers_call(_ecore_time_loop_time); _ecore_timer_cleanup(); /* process signals into events .... */ - while (_ecore_signal_count_get()) _ecore_signal_call(); + _ecore_signal_received_process(); + /* if as a result of timers/animators or signals we have accumulated + * events, then instantly handle them */ if (_ecore_event_exist()) { + /* but first conceptually enter an idle state */ _ecore_idle_enterer_call(); _ecore_throttle(); - have_event = 1; + /* now quickly poll to see which input fd's are active */ _ecore_main_select(0.0); + /* allow newly queued timers to expire from now on */ _ecore_timer_enable_new(); - goto process_events; + /* go straight to processing the events we had queued */ + goto process_all; } - /* call idle enterers ... */ - if (!once_only) + + if (once_only) { - _ecore_idle_enterer_call(); - _ecore_throttle(); - } - else - { - have_event = have_signal = 0; - - if (_ecore_main_select(0.0) > 0) have_event = 1; - if (_ecore_signal_count_get() > 0) have_signal = 1; - if (have_signal || have_event) + /* in once_only mode we should quickly poll for inputs, signals + * if we got any events or signals, allow new timers to process. + * use bitwise or to force both conditions to be tested and + * merged together */ + if (_ecore_main_select(0.0) | _ecore_signal_count_get()) { _ecore_timer_enable_new(); - goto process_events; + goto process_all; } } + else + { + /* call idle enterers ... */ + _ecore_idle_enterer_call(); + _ecore_throttle(); + } /* if these calls caused any buffered events to appear - deal with them */ if (fd_handlers_with_buffer) _ecore_main_fd_handlers_buf_call(); - /* if there are any - jump to processing them */ + /* if there are any (buffered fd handling may generate them) + * then jump to processing them */ if (_ecore_event_exist()) { - have_event = 1; _ecore_main_select(0.0); _ecore_timer_enable_new(); - goto process_events; + goto process_all; } + if (once_only) { + /* in once_only mode enter idle here instead and then return */ _ecore_idle_enterer_call(); _ecore_throttle(); - in_main_loop--; _ecore_timer_enable_new(); - return; + goto done; } - if (_ecore_fps_debug) - { - t2 = ecore_time_get(); - if ((t1 > 0.0) && (t2 > 0.0)) - _ecore_fps_debug_runtime_add(t2 - t1); - } - start_loop: + _ecore_fps_marker_1(); + + /* start of the sleeping or looping section */ +start_loop: /***************************************************************/ /* any timers re-added as a result of these are allowed to go */ _ecore_timer_enable_new(); + /* if we have been asked to quit the mainloop then exit at this point */ if (do_quit) { - in_main_loop--; _ecore_timer_enable_new(); - return; + goto done; } - /* init flags */ - have_event = have_signal = 0; - next_time = _ecore_timer_next_get(); - /* no timers */ - if (next_time < 0) + if (!_ecore_event_exist()) { + /* init flags */ + next_time = _ecore_timer_next_get(); /* no idlers */ if (!_ecore_idler_exist()) { - if (_ecore_main_select(-1.0) > 0) have_event = 1; + /* sleep until timeout or forever (-1.0) waiting for on fds */ + _ecore_main_select(next_time); } - /* idlers */ else { - for (;;) - { - _ecore_time_loop_time = ecore_time_get(); - if (!_ecore_idler_call()) goto start_loop; - if (_ecore_main_select(0.0) > 0) break; - if (_ecore_event_exist()) break; - if (_ecore_signal_count_get() > 0) break; - if (_ecore_timers_exists()) goto start_loop; - if (do_quit) break; - } + int action = LOOP_CONTINUE; + + /* no timers - spin */ + if (next_time < 0) action = _ecore_main_loop_spin_no_timers(); + /* timers - spin */ + else action = _ecore_main_loop_spin_timers(); + if (action == SPIN_RESTART) goto start_loop; } } - /* timers */ - else - { - /* no idlers */ - if (!_ecore_idler_exist()) - { - if (_ecore_main_select(next_time) > 0) have_event = 1; - } - /* idlers */ - else - { - for (;;) - { - _ecore_time_loop_time = ecore_time_get(); - if (!_ecore_idler_call()) goto start_loop; - if (_ecore_main_select(0.0) > 0) break; - if (_ecore_event_exist()) break; - if (_ecore_signal_count_get() > 0) break; - if (have_event || have_signal) break; - next_time = _ecore_timer_next_get(); - if (next_time <= 0) break; - if (do_quit) break; - } - } - } + _ecore_fps_marker_2(); + - if (_ecore_fps_debug) t1 = ecore_time_get(); + /* actually wake up and deal with input, events etc. */ +process_all: /***********************************************************/ + /* we came out of our "wait state" so idle has exited */ - process_events: if (!once_only) _ecore_idle_exiter_call(); /* call the fd handler per fd that became alive... */ /* this should read or write any data to the monitored fd and then */ /* post events onto the ecore event pipe if necessary */ _ecore_main_fd_handlers_call(); - if (fd_handlers_with_buffer) - _ecore_main_fd_handlers_buf_call(); + if (fd_handlers_with_buffer) _ecore_main_fd_handlers_buf_call(); /* process signals into events .... */ - while (_ecore_signal_count_get()) _ecore_signal_call(); + _ecore_signal_received_process(); /* handle events ... */ _ecore_event_call(); _ecore_main_fd_handlers_cleanup(); if (once_only) { + /* if in once_only mode handle idle exiting */ _ecore_idle_enterer_call(); _ecore_throttle(); } + +done: /*******************************************************************/ in_main_loop--; } #endif Modified: trunk/ecore/src/lib/ecore/ecore_private.h =================================================================== --- trunk/ecore/src/lib/ecore/ecore_private.h 2011-09-02 01:35:16 UTC (rev 63081) +++ trunk/ecore/src/lib/ecore/ecore_private.h 2011-09-02 03:29:11 UTC (rev 63082) @@ -128,11 +128,13 @@ void _ecore_timer_cleanup(void); void _ecore_timer_enable_new(void); double _ecore_timer_next_get(void); +void _ecore_timer_expired_timers_call(double when); int _ecore_timers_exists(void); -int _ecore_timer_call(double when); +int _ecore_timer_expired_call(double when); + void _ecore_idler_shutdown(void); -int _ecore_idler_call(void); +int _ecore_idler_all_call(void); int _ecore_idler_exist(void); void _ecore_idle_enterer_shutdown(void); @@ -165,11 +167,13 @@ #ifdef _WIN32 static inline void _ecore_signal_shutdown(void) { } static inline void _ecore_signal_init(void) { } +static inline void _ecore_signal_received_process(void) { } static inline int _ecore_signal_count_get(void) { return 0; } static inline void _ecore_signal_call(void) { } #else void _ecore_signal_shutdown(void); void _ecore_signal_init(void); +void _ecore_signal_received_process(void); int _ecore_signal_count_get(void); void _ecore_signal_call(void); #endif Modified: trunk/ecore/src/lib/ecore/ecore_signal.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_signal.c 2011-09-02 01:35:16 UTC (rev 63081) +++ trunk/ecore/src/lib/ecore/ecore_signal.c 2011-09-02 03:29:11 UTC (rev 63082) @@ -103,6 +103,12 @@ #endif } +void +_ecore_signal_received_process(void) +{ + while (_ecore_signal_count_get()) _ecore_signal_call(); +} + int _ecore_signal_count_get(void) { Modified: trunk/ecore/src/lib/ecore/ecore_timer.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_timer.c 2011-09-02 01:35:16 UTC (rev 63081) +++ trunk/ecore/src/lib/ecore/ecore_timer.c 2011-09-02 03:29:11 UTC (rev 63082) @@ -678,8 +678,16 @@ } /* assume that we hold the ecore lock when entering this function */ +void +_ecore_timer_expired_timers_call(double when) +{ + /* call the first expired timer until no expired timers exist */ + while (_ecore_timer_expired_call(when)); +} + +/* assume that we hold the ecore lock when entering this function */ int -_ecore_timer_call(double when) +_ecore_timer_expired_call(double when) { if (!timers) return 0; if (last_check > when) |
From: Enlightenment S. <no-...@en...> - 2011-10-21 05:40:46
|
Log: ran ecrustify on ecore. some manual fixing too. Author: raster Date: 2011-10-20 22:40:39 -0700 (Thu, 20 Oct 2011) New Revision: 64238 Trac: http://trac.enlightenment.org/e/changeset/64238 Modified: trunk/ecore/src/lib/ecore/Ecore.h trunk/ecore/src/lib/ecore/Ecore_Getopt.h trunk/ecore/src/lib/ecore/ecore.c trunk/ecore/src/lib/ecore/ecore_anim.c trunk/ecore/src/lib/ecore/ecore_app.c trunk/ecore/src/lib/ecore/ecore_events.c trunk/ecore/src/lib/ecore/ecore_exe.c trunk/ecore/src/lib/ecore/ecore_exe_win32.c trunk/ecore/src/lib/ecore/ecore_exe_wince.c trunk/ecore/src/lib/ecore/ecore_getopt.c trunk/ecore/src/lib/ecore/ecore_glib.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_signal.c trunk/ecore/src/lib/ecore/ecore_thread.c trunk/ecore/src/lib/ecore/ecore_throttle.c trunk/ecore/src/lib/ecore/ecore_time.c trunk/ecore/src/lib/ecore/ecore_timer.c Modified: trunk/ecore/src/lib/ecore/Ecore.h =================================================================== --- trunk/ecore/src/lib/ecore/Ecore.h 2011-10-21 05:40:01 UTC (rev 64237) +++ trunk/ecore/src/lib/ecore/Ecore.h 2011-10-21 05:40:39 UTC (rev 64238) @@ -1,256 +1,262 @@ -/** -@brief Ecore Library Public API Calls - -These routines are used for Ecore Library interaction -*/ +/** + @brief Ecore Library Public API Calls + These routines are used for Ecore Library interaction + */ + /** -@mainpage Ecore + @mainpage Ecore -@version 1.1 -@date 2000-2011 + @version 1.1 + @date 2000-2011 -Please see the @ref authors page for contact details. + Please see the @ref authors page for contact details. -@section intro Introduction + @section intro Introduction -Ecore is a library of convenience functions. A brief explanation of how to use -it can be found in @ref Ecore_Main_Loop_Page. + Ecore is a library of convenience functions. A brief explanation of how to use + it can be found in @ref Ecore_Main_Loop_Page. -The Ecore library provides the following modules: -@li @ref Ecore_Main_Loop_Group -@li @ref Ecore_File_Group -@li @ref Ecore_Con_Group -@li @link Ecore_Evas.h Ecore_Evas - Evas convenience functions. @endlink -@li @ref Ecore_FB_Group -@li @link Ecore_Ipc.h Ecore_IPC - Inter Process Communication functions. @endlink -@li @link Ecore_X.h Ecore_X - X Windows System wrapper. @endlink -@li @ref Ecore_Win32_Group -@li @ref Ecore_WinCE_Group + The Ecore library provides the following modules: + @li @ref Ecore_Main_Loop_Group + @li @ref Ecore_File_Group + @li @ref Ecore_Con_Group + @li @link Ecore_Evas.h Ecore_Evas - Evas convenience functions. @endlink + @li @ref Ecore_FB_Group + @li @link Ecore_Ipc.h Ecore_IPC - Inter Process Communication functions. @endlink + @li @link Ecore_X.h Ecore_X - X Windows System wrapper. @endlink + @li @ref Ecore_Win32_Group + @li @ref Ecore_WinCE_Group -For more info on Ecore usage, there are these @ref Examples. + For more info on Ecore usage, there are these @ref Examples. -@section compiling How to compile using Ecore? -pkgconfig (.pc) files are installed for every ecore module. -Thus, to compile using any of them, you can use something like the following: + @section compiling How to compile using Ecore? + pkgconfig (.pc) files are installed for every ecore module. + Thus, to compile using any of them, you can use something like the following: -@verbatim -gcc *.c $(pkg-config ecore ecore-$x ecore-$y [...] --cflags --libs) -@endverbatim + @verbatim + gcc *.c $(pkg-config ecore ecore-$x ecore-$y [...] --cflags --libs) + @endverbatim -@section install How is it installed? + @section install How is it installed? -Suggested configure options for evas for a Linux desktop X display: + Suggested configure options for evas for a Linux desktop X display: -@verbatim -./configure \ -make -su - -... -make install -@endverbatim + @verbatim + ./configure \ + make + su - + ... + make install + @endverbatim -*/ + */ /** -@page authors Authors -@author Carsten Haitzler <ra...@ra...> -@author Tom Gilbert <to...@li...> -@author Burra <bu...@co...> -@author Chris Ross <ch...@da...> -@author Term <te...@tw...> -@author Tilman Sauerbeck <ti...@co...> -@author Ibukun Olumuyiwa <ib...@co...> -@author Yuri <da...@ho...> -@author Nicholas Curran <qu...@bi...> -@author Howell Tam <pi...@pi...> -@author Nathan Ingersoll <rb...@us...> -@author Andrew Elcock <an...@el...> -@author Kim Woelders <ki...@wo...> -@author Sebastian Dransfeld <seb...@ta...> -@author Simon Poole <sim...@th...> -@author Jorge Luis Zapata Muga <jor...@gm...> -@author dan sinclair <ze...@ev...> -@author Michael 'Mickey' Lauer <mi...@tm...> -@author David 'onefang' Seikel <on...@gm...> -@author Hisham 'CodeWarrior' Mardam Bey <hi...@hi...> -@author Brian 'rephorm' Mattern <re...@re...> -@author Tim Horton <hor...@gm...> -@author Arnaud de Turckheim 'quarium' <qu...@gm...> -@author Matt Barclay <mba...@gm...> -@author Peter Wehrfritz <pet...@we...> -@author Albin "Lutin" Tonnerre <alb...@gm...> -@author Vincent Torri <vin...@gm...> -@author Lars Munch <la...@se...> -@author Andre Dieb <and...@gm...> -@author Mathieu Taillefumier <mat...@fr...> -@author Rui Miguel Silva Seabra <rm...@14...> -@author Samsung Electronics -@author Samsung SAIT -@author Nicolas Aguirre <agu...@gm...> -@author Brett Nash <na...@na...> -@author Mike Blumenkrantz <mi...@ze...> -@author Leif Middelschulte <lei...@gm...> -@author Mike McCormack <mj....@sa...> -@author Sangho Park <gou...@gm...> -@author Jihoon Kim <jih...@sa...> <imf...@gm...> -@author Daniel Juyung Seo <seo...@gm...> <juy...@sa...> + @page authors Authors + @author Carsten Haitzler <ra...@ra...> + @author Tom Gilbert <to...@li...> + @author Burra <bu...@co...> + @author Chris Ross <ch...@da...> + @author Term <te...@tw...> + @author Tilman Sauerbeck <ti...@co...> + @author Ibukun Olumuyiwa <ib...@co...> + @author Yuri <da...@ho...> + @author Nicholas Curran <qu...@bi...> + @author Howell Tam <pi...@pi...> + @author Nathan Ingersoll <rb...@us...> + @author Andrew Elcock <an...@el...> + @author Kim Woelders <ki...@wo...> + @author Sebastian Dransfeld <seb...@ta...> + @author Simon Poole <sim...@th...> + @author Jorge Luis Zapata Muga <jor...@gm...> + @author dan sinclair <ze...@ev...> + @author Michael 'Mickey' Lauer <mi...@tm...> + @author David 'onefang' Seikel <on...@gm...> + @author Hisham 'CodeWarrior' Mardam Bey <hi...@hi...> + @author Brian 'rephorm' Mattern <re...@re...> + @author Tim Horton <hor...@gm...> + @author Arnaud de Turckheim 'quarium' <qu...@gm...> + @author Matt Barclay <mba...@gm...> + @author Peter Wehrfritz <pet...@we...> + @author Albin "Lutin" Tonnerre <alb...@gm...> + @author Vincent Torri <vin...@gm...> + @author Lars Munch <la...@se...> + @author Andre Dieb <and...@gm...> + @author Mathieu Taillefumier <mat...@fr...> + @author Rui Miguel Silva Seabra <rm...@14...> + @author Samsung Electronics + @author Samsung SAIT + @author Nicolas Aguirre <agu...@gm...> + @author Brett Nash <na...@na...> + @author Mike Blumenkrantz <mi...@ze...> + @author Leif Middelschulte <lei...@gm...> + @author Mike McCormack <mj....@sa...> + @author Sangho Park <gou...@gm...> + @author Jihoon Kim <jih...@sa...> <imf...@gm...> + @author Daniel Juyung Seo <seo...@gm...> <juy...@sa...> -Please contact <enl...@li...> to get in -contact with the developers and maintainers. -*/ + Please contact <enl...@li...> to get in + contact with the developers and maintainers. + */ /* -@page Ecore_Main_Loop_Page The Ecore Main Loop + @page Ecore_Main_Loop_Page The Ecore Main Loop -@section intro What is Ecore? + @section intro What is Ecore? -Ecore is a clean and tiny event loop library with many modules to do lots of -convenient things for a programmer, to save time and effort. + Ecore is a clean and tiny event loop library with many modules to do lots of + convenient things for a programmer, to save time and effort. -It's small and lean, designed to work on embedded systems all the way to -large and powerful multi-cpu workstations. It serialises all system signals, -events etc. into a single event queue, that is easily processed without -needing to worry about concurrency. A properly written, event-driven program -using this kind of programming doesn't need threads, nor has to worry about -concurrency. It turns a program into a state machine, and makes it very -robust and easy to follow. + It's small and lean, designed to work on embedded systems all the way to + large and powerful multi-cpu workstations. It serialises all system signals, + events etc. into a single event queue, that is easily processed without + needing to worry about concurrency. A properly written, event-driven program + using this kind of programming doesn't need threads, nor has to worry about + concurrency. It turns a program into a state machine, and makes it very + robust and easy to follow. -Ecore gives you other handy primitives, such as timers to tick over for you -and call specified functions at particular times so the programmer can use -this to do things, like animate, or time out on connections or tasks that take -too long etc. + Ecore gives you other handy primitives, such as timers to tick over for you + and call specified functions at particular times so the programmer can use + this to do things, like animate, or time out on connections or tasks that take + too long etc. -Idle handlers are provided too, as well as calls on entering an idle state -(often a very good time to update the state of the program). All events that -enter the system are passed to specific callback functions that the program -sets up to handle those events. Handling them is simple and other Ecore -modules produce more events on the queue, coming from other sources such as -file descriptors etc. + Idle handlers are provided too, as well as calls on entering an idle state + (often a very good time to update the state of the program). All events that + enter the system are passed to specific callback functions that the program + sets up to handle those events. Handling them is simple and other Ecore + modules produce more events on the queue, coming from other sources such as + file descriptors etc. -Ecore also lets you have functions called when file descriptors become active -for reading or writing, allowing for streamlined, non-blocking IO. + Ecore also lets you have functions called when file descriptors become active + for reading or writing, allowing for streamlined, non-blocking IO. -Here is an example of a simple program and its basic event loop flow: + Here is an example of a simple program and its basic event loop flow: -@image html prog_flow.png -@image latex prog_flow.eps width=\textwidth + @image html prog_flow.png + @image latex prog_flow.eps width=\textwidth -@section work How does Ecore work? + @section work How does Ecore work? -Ecore is very easy to learn and use. All the function calls are designed to -be easy to remember, explicit in describing what they do, and heavily -name-spaced. Ecore programs can start and be very simple. + Ecore is very easy to learn and use. All the function calls are designed to + be easy to remember, explicit in describing what they do, and heavily + name-spaced. Ecore programs can start and be very simple. -For example: + For example: -@code -#include <Ecore.h> + @code + #include <Ecore.h> -int main(int argc, const char **argv) -{ - ecore_init(); - ecore_app_args_set(argc, argv); - ecore_main_loop_begin(); - ecore_shutdown(); - return 0; -} -@endcode + int + main(int argc, const char **argv) + { + ecore_init(); + ecore_app_args_set(argc, argv); + ecore_main_loop_begin(); + ecore_shutdown(); + return 0; + } + @endcode -This program is very simple and doesn't check for errors, but it does start up -and begin a main loop waiting for events or timers to tick off. This program -doesn't set up any, but now we can expand on this simple program a little -more by adding some event handlers and timers. + This program is very simple and doesn't check for errors, but it does start up + and begin a main loop waiting for events or timers to tick off. This program + doesn't set up any, but now we can expand on this simple program a little + more by adding some event handlers and timers. -@code -#include <Ecore.h> + @code + #include <Ecore.h> -Ecore_Timer *timer1 = NULL; -Ecore_Event_Handler *handler1 = NULL; -double start_time = 0.0; + Ecore_Timer *timer1 = NULL; + Ecore_Event_Handler *handler1 = NULL; + double start_time = 0.0; -int timer_func(void *data) -{ - printf("Tick timer. Sec: %3.2f\n", ecore_time_get() - start_time); - return 1; -} + int + timer_func(void *data) + { + printf("Tick timer. Sec: %3.2f\n", ecore_time_get() - start_time); + return 1; + } -int exit_func(void *data, int ev_type, void *ev) -{ - Ecore_Event_Signal_Exit *e; + int + exit_func(void *data, int ev_type, void *ev) + { + Ecore_Event_Signal_Exit *e; - e = (Ecore_Event_Signal_Exit *)ev; - if (e->interrupt) printf("Exit: interrupt\n"); - else if (e->quit) printf("Exit: quit\n"); - else if (e->terminate) printf("Exit: terminate\n"); - ecore_main_loop_quit(); - return 1; -} + e = (Ecore_Event_Signal_Exit *)ev; + if (e->interrupt) printf("Exit: interrupt\n"); + else if (e->quit) printf("Exit: quit\n"); + else if (e->terminate) printf("Exit: terminate\n"); + ecore_main_loop_quit(); + return 1; + } -int main(int argc, const char **argv) -{ - ecore_init(); - ecore_app_args_set(argc, argv); - start_time = ecore_time_get(); - handler1 = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, exit_func, NULL); - timer1 = ecore_timer_add(0.5, timer_func, NULL); - ecore_main_loop_begin(); - ecore_shutdown(); - return 0; -} -@endcode + int + main(int argc, const char **argv) + { + ecore_init(); + ecore_app_args_set(argc, argv); + start_time = ecore_time_get(); + handler1 = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, exit_func, NULL); + timer1 = ecore_timer_add(0.5, timer_func, NULL); + ecore_main_loop_begin(); + ecore_shutdown(); + return 0; + } + @endcode -In the previous example, we initialize our application and get the time at -which our program has started so we can calculate an offset. We set -up a timer to tick off in 0.5 seconds, and since it returns 1, will -keep ticking off every 0.5 seconds until it returns 0, or is deleted -by hand. An event handler is set up to call a function - exit_func(), -whenever an event of type ECORE_EVENT_SIGNAL_EXIT is received (CTRL-C -on the command line will cause such an event to happen). If this event -occurs it tells you what kind of exit signal was received, and asks -the main loop to quit when it is finished by calling -ecore_main_loop_quit(). + In the previous example, we initialize our application and get the time at + which our program has started so we can calculate an offset. We set + up a timer to tick off in 0.5 seconds, and since it returns 1, will + keep ticking off every 0.5 seconds until it returns 0, or is deleted + by hand. An event handler is set up to call a function - + exit_func(), + whenever an event of type ECORE_EVENT_SIGNAL_EXIT is received (CTRL-C + on the command line will cause such an event to happen). If this event + occurs it tells you what kind of exit signal was received, and asks + the main loop to quit when it is finished by calling + ecore_main_loop_quit(). -The handles returned by ecore_timer_add() and ecore_event_handler_add() are -only stored here as an example. If you don't need to address the timer or -event handler again you don't need to store the result, so just call the -function, and don't assign the result to any variable. + The handles returned by ecore_timer_add() and + ecore_event_handler_add() are + only stored here as an example. If you don't need to address the timer or + event handler again you don't need to store the result, so just call the + function, and don't assign the result to any variable. -This program looks slightly more complex than needed to do these simple -things, but in principle, programs don't get any more complex. You add more -event handlers, for more events, will have more timers and such, BUT it all -follows the same principles as shown in this example. + This program looks slightly more complex than needed to do these simple + things, but in principle, programs don't get any more complex. You add more + event handlers, for more events, will have more timers and such, BUT it all + follows the same principles as shown in this example. -*/ + */ /* -@page Ecore_Config_Page The Enlightened Property Library + @page Ecore_Config_Page The Enlightened Property Library -The Enlightened Property Library (Ecore_Config) is an adbstraction -from the complexities of writing your own configuration. It provides -many features using the Enlightenment 17 development libraries. + The Enlightened Property Library (Ecore_Config) is an adbstraction + from the complexities of writing your own configuration. It provides + many features using the Enlightenment 17 development libraries. -To use the library, you: -@li Set the default values of your properties. -@li Load the configuration from a file. You must set the default values + To use the library, you: + @li Set the default values of your properties. + @li Load the configuration from a file. You must set the default values first, so that the library knows the correct type of each argument. -The following examples show how to use the Enlightened Property Library: -@li @link config_basic_example.c config_basic_example.c @endlink -@li @link config_listener_example.c config_listener_example.c @endlink + The following examples show how to use the Enlightened Property Library: + @li @link config_basic_example.c config_basic_example.c @endlink + @li @link config_listener_example.c config_listener_example.c @endlink -*/ + */ /** -@page X_Window_System_Page X Window System + @page X_Window_System_Page X Window System -The Ecore library includes a wrapper for handling the X window system. -This page briefly explains what the X window system is and various terms -that are used. -*/ + The Ecore library includes a wrapper for handling the X window system. + This page briefly explains what the X window system is and various terms + that are used. + */ #ifndef _ECORE_H #define _ECORE_H @@ -303,225 +309,240 @@ extern "C" { #endif - /** - * @defgroup Ecore_Init_Group Ecore initialization and shutdown functions. - * - * @{ - */ +/** + * @defgroup Ecore_Init_Group Ecore initialization and shutdown functions. + * + * @{ + */ - EAPI int ecore_init(void); - EAPI int ecore_shutdown(void); +EAPI int + ecore_init(void); +EAPI int + ecore_shutdown(void); - /** - * @} - */ +/** + * @} + */ - /** - * - * @defgroup Ecore_Main_Loop_Group Ecore main loop functions - * - * These are functions acting on Ecore's main loop itself or on - * events and infrastructure directly linked to it. This loop is - * designed to work on embedded systems all the way to large and - * powerful multi-cpu workstations. - * - * It serialises all system signals and events into a single event - * queue, that can be easily processed without needing to worry - * about concurrency. A properly written, event-driven program - * using this kind of programming does not need threads. It makes - * the program very robust and easy to follow. - * - * For example, for the main loop to be of any use, you need to be - * able to add @b events and event handlers on it. Events for file - * descriptor events are covered in @ref Ecore_FD_Handler_Group. - * - * Timer functions are covered in @ref Ecore_Time_Group. - * - * There is also provision for callbacks for when the loop enters or - * exits an @b idle state. See @ref Ecore_Idle_Group for more - * information on it. - * - * Functions are also provided for spawning child processes using - * @c fork(). See @ref Ecore_Exe_Group for more details on it. - * - * Here is an example of simple program and its basic event loop - * flow: - * - * @image html prog_flow.png - * @image latex prog_flow.eps width=\textwidth - * - * For examples of setting up and using a main loop, see - * @ref Ecore_Main_Loop_Page. - * - * @{ - */ +/** + * + * @defgroup Ecore_Main_Loop_Group Ecore main loop functions + * + * These are functions acting on Ecore's main loop itself or on + * events and infrastructure directly linked to it. This loop is + * designed to work on embedded systems all the way to large and + * powerful multi-cpu workstations. + * + * It serialises all system signals and events into a single event + * queue, that can be easily processed without needing to worry + * about concurrency. A properly written, event-driven program + * using this kind of programming does not need threads. It makes + * the program very robust and easy to follow. + * + * For example, for the main loop to be of any use, you need to be + * able to add @b events and event handlers on it. Events for file + * descriptor events are covered in @ref Ecore_FD_Handler_Group. + * + * Timer functions are covered in @ref Ecore_Time_Group. + * + * There is also provision for callbacks for when the loop enters or + * exits an @b idle state. See @ref Ecore_Idle_Group for more + * information on it. + * + * Functions are also provided for spawning child processes using + * @c fork(). See @ref Ecore_Exe_Group for more details on it. + * + * Here is an example of simple program and its basic event loop + * flow: + * + * @image html prog_flow.png + * @image latex prog_flow.eps width=\textwidth + * + * For examples of setting up and using a main loop, see + * @ref Ecore_Main_Loop_Page. + * + * @{ + */ #define ECORE_VERSION_MAJOR 1 #define ECORE_VERSION_MINOR 0 - typedef struct _Ecore_Version - { - int major; - int minor; - int micro; - int revision; - } Ecore_Version; +typedef struct _Ecore_Version +{ + int major; + int minor; + int micro; + int revision; +} Ecore_Version; - EAPI extern Ecore_Version *ecore_version; +EAPI extern Ecore_Version *ecore_version; -#define ECORE_CALLBACK_CANCEL EINA_FALSE /**< Return value to remove a callback */ -#define ECORE_CALLBACK_RENEW EINA_TRUE /**< Return value to keep a callback */ +#define ECORE_CALLBACK_CANCEL EINA_FALSE /**< Return value to remove a callback */ +#define ECORE_CALLBACK_RENEW EINA_TRUE /**< Return value to keep a callback */ #define ECORE_CALLBACK_PASS_ON EINA_TRUE /**< Return value to pass event to next handler */ -#define ECORE_CALLBACK_DONE EINA_FALSE /**< Return value to stop event handling */ +#define ECORE_CALLBACK_DONE EINA_FALSE /**< Return value to stop event handling */ - /** - * @typedef Ecore_Task_Cb Ecore_Task_Cb - * A callback run for a task (timer, idler, poller, animator, etc) - */ - typedef Eina_Bool (*Ecore_Task_Cb) (void *data); +/** + * @typedef Ecore_Task_Cb Ecore_Task_Cb + * A callback run for a task (timer, idler, poller, animator, etc) + */ +typedef Eina_Bool (*Ecore_Task_Cb)(void *data); - /** - * @typedef Ecore_Eselect_Function Ecore_Eselect_Function - * A function which can be used to replace select() in the main loop - */ - typedef int (*Ecore_Select_Function)(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); +/** + * @typedef Ecore_Eselect_Function Ecore_Eselect_Function + * A function which can be used to replace select() in the main loop + */ +typedef int (*Ecore_Select_Function)(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); - EAPI void ecore_main_loop_iterate(void); +EAPI void +ecore_main_loop_iterate(void); - EAPI void ecore_main_loop_select_func_set(Ecore_Select_Function func); - EAPI Ecore_Select_Function ecore_main_loop_select_func_get(void); +EAPI void + ecore_main_loop_select_func_set(Ecore_Select_Function func); +EAPI Ecore_Select_Function + ecore_main_loop_select_func_get(void); - EAPI Eina_Bool ecore_main_loop_glib_integrate(void); - EAPI void ecore_main_loop_glib_always_integrate_disable(void); +EAPI Eina_Bool + ecore_main_loop_glib_integrate(void); +EAPI void + ecore_main_loop_glib_always_integrate_disable(void); - EAPI void ecore_main_loop_begin(void); - EAPI void ecore_main_loop_quit(void); +EAPI void + ecore_main_loop_begin(void); +EAPI void + ecore_main_loop_quit(void); - /** - * @typedef Ecore_Cb Ecore_Cb - * A generic callback called as a hook when a certain point in - * execution is reached. - */ - typedef void (*Ecore_Cb) (void *data); +/** + * @typedef Ecore_Cb Ecore_Cb + * A generic callback called as a hook when a certain point in + * execution is reached. + */ +typedef void (*Ecore_Cb)(void *data); - /** - * @typedef Ecore_Data_Cb Ecore_Data_Cb - * A callback which is used to return data to the main function - */ - typedef void *(*Ecore_Data_Cb) (void *data); +/** + * @typedef Ecore_Data_Cb Ecore_Data_Cb + * A callback which is used to return data to the main function + */ +typedef void *(*Ecore_Data_Cb)(void *data); - /** - * @brief Call callback asynchronously in the main loop. - * @since 1.1.0 - * - * @param callback The callback to call in the main loop - * @param data The data to give to that call back - * - * For all calls that need to happen in the main loop (most EFL functions do), - * this helper function provides the infrastructure needed to do it safely - * by avoiding dead lock, race condition and properly wake up the main loop. - * - * Remember after that function call, you should never touch again the @p data - * in the thread, it is owned by the main loop and your callback should take - * care of freeing it if necessary. - */ - EAPI void ecore_main_loop_thread_safe_call_async(Ecore_Cb callback, void *data); +/** + * @brief Call callback asynchronously in the main loop. + * @since 1.1.0 + * + * @param callback The callback to call in the main loop + * @param data The data to give to that call back + * + * For all calls that need to happen in the main loop (most EFL functions do), + * this helper function provides the infrastructure needed to do it safely + * by avoiding dead lock, race condition and properly wake up the main loop. + * + * Remember after that function call, you should never touch again the @p data + * in the thread, it is owned by the main loop and your callback should take + * care of freeing it if necessary. + */ +EAPI void +ecore_main_loop_thread_safe_call_async(Ecore_Cb callback, + void *data); - /** - * @brief Call callback synchronously in the main loop. - * @since 1.1.0 - * - * @param callback The callback to call in the main loop - * @param data The data to give to that call back - * @return the value returned by the callback in the main loop - * - * For all calls that need to happen in the main loop (most EFL functions do), - * this helper function provides the infrastructure needed to do it safely - * by avoiding dead lock, race condition and properly wake up the main loop. - * - * Remember this function will block until the callback is executed in the - * main loop. It can take time and you have no guaranty about the timeline. - */ - EAPI void *ecore_main_loop_thread_safe_call_sync(Ecore_Data_Cb callback, void *data); +/** + * @brief Call callback synchronously in the main loop. + * @since 1.1.0 + * + * @param callback The callback to call in the main loop + * @param data The data to give to that call back + * @return the value returned by the callback in the main loop + * + * For all calls that need to happen in the main loop (most EFL functions do), + * this helper function provides the infrastructure needed to do it safely + * by avoiding dead lock, race condition and properly wake up the main loop. + * + * Remember this function will block until the callback is executed in the + * main loop. It can take time and you have no guaranty about the timeline. + */ +EAPI void * +ecore_main_loop_thread_safe_call_sync(Ecore_Data_Cb callback, + void *data); - /** - * @brief This function suspend the main loop in a know state - * @since 1.1.0 - * - * @result the number of time ecore_thread_main_loop_begin() has been called - * in this thread, if the main loop was suspended correctly. If not, it return @c -1. - * - * This function suspend the main loop in a know state, this let you - * use any EFL call you want after it return. Be carefull, the main loop - * is blocked until you call ecore_thread_main_loop_end(). This is - * the only sane way to achieve pseudo thread safety. - * - * Notice that until the main loop is blocked, the thread is blocked - * and their is noway around that. - * - * We still advise you, when possible, to use ecore_main_loop_thread_safe_call_async() - * as it will not block the thread nor the main loop. - */ - EAPI int ecore_thread_main_loop_begin(void); +/** + * @brief This function suspend the main loop in a know state + * @since 1.1.0 + * + * @result the number of time ecore_thread_main_loop_begin() has been called + * in this thread, if the main loop was suspended correctly. If not, it return @c -1. + * + * This function suspend the main loop in a know state, this let you + * use any EFL call you want after it return. Be carefull, the main loop + * is blocked until you call ecore_thread_main_loop_end(). This is + * the only sane way to achieve pseudo thread safety. + * + * Notice that until the main loop is blocked, the thread is blocked + * and their is noway around that. + * + * We still advise you, when possible, to use ecore_main_loop_thread_safe_call_async() + * as it will not block the thread nor the main loop. + */ +EAPI int +ecore_thread_main_loop_begin(void); - /** - * @brief Unlock the main loop. - * @since 1.1.0 - * - * @result the number of time ecore_thread_main_loop_end() need to be called before - * the main loop is unlocked again. @c -1 will be returned if you are trying to unlock - * when there wasn't enough call to ecore_thread_main_loop_begin(). - * - * After a call to ecore_thread_main_loop_begin(), you need to absolutly - * call ecore_thread_main_loop_end(), or you application will stay frozen. - */ - EAPI int ecore_thread_main_loop_end(void); +/** + * @brief Unlock the main loop. + * @since 1.1.0 + * + * @result the number of time ecore_thread_main_loop_end() need to be called before + * the main loop is unlocked again. @c -1 will be returned if you are trying to unlock + * when there wasn't enough call to ecore_thread_main_loop_begin(). + * + * After a call to ecore_thread_main_loop_begin(), you need to absolutly + * call ecore_thread_main_loop_end(), or you application will stay frozen. + */ +EAPI int +ecore_thread_main_loop_end(void); - /** - * @} - */ +/** + * @} + */ - /** - * @defgroup Ecore_Event_Group Ecore Event functions - * - * Ecore events are used to wake up the Ecore main loop to warn - * about state changes, tasks completed, data available for reading - * or writing, etc. They are the base of the event oriented - * programming. - * - * The idea is to write many functions (callbacks) that will be - * registered to specific events, and called when these events - * happen. This way, when the system state changes (a mouse click is - * detected, a key is pressed, or the content of a file changes, for - * example), the respective callbacks will be called with some - * information about that event. Usually the function/callback will - * have a data pointer to the event info (the position in the screen - * where the mouse was clicked, the name of the key that was - * pressed, or the name of the file that has changed). - * - * The basic usage, when one needs to watch for an existing event, - * is to register a callback to it using ecore_event_add(). Of - * course it's necessary to know beforehand what are the types of - * events that the system/library will emmit. This should be - * available with the documentation from that system/library. - * - * When writing a library or group of functions that need to inform - * about something, and you already are running on top of a main - * loop, it is usually a good approach to use events. This way you - * allow others to register as many callbacks as necessary to this - * event, and don't have to care about who is registering to it. The - * functions ecore_event_type_new() and ecore_event_add() are - * available for this purpose. - * - * Example that deals with events: - * - * @li @ref ecore_event_example_c - * - * @ingroup Ecore_Main_Loop_Group - * - * @{ - */ +/** + * @defgroup Ecore_Event_Group Ecore Event functions + * + * Ecore events are used to wake up the Ecore main loop to warn + * about state changes, tasks completed, data available for reading + * or writing, etc. They are the base of the event oriented + * programming. + * + * The idea is to write many functions (callbacks) that will be + * registered to specific events, and called when these events + * happen. This way, when the system state changes (a mouse click is + * detected, a key is pressed, or the content of a file changes, for + * example), the respective callbacks will be called with some + * information about that event. Usually the function/callback will + * have a data pointer to the event info (the position in the screen + * where the mouse was clicked, the name of the key that was + * pressed, or the name of the file that has changed). + * + * The basic usage, when one needs to watch for an existing event, + * is to register a callback to it using ecore_event_add(). Of + * course it's necessary to know beforehand what are the types of + * events that the system/library will emmit. This should be + * available with the documentation from that system/library. + * + * When writing a library or group of functions that need to inform + * about something, and you already are running on top of a main + * loop, it is usually a good approach to use events. This way you + * allow others to register as many callbacks as necessary to this + * event, and don't have to care about who is registering to it. The + * functions ecore_event_type_new() and ecore_event_add() are + * available for this purpose. + * + * Example that deals with events: + * + * @li @ref ecore_event_example_c + * + * @ingroup Ecore_Main_Loop_Group + * + * @{ + */ #define ECORE_EVENT_NONE 0 #define ECORE_EVENT_SIGNAL_USER 1 /**< User signal event */ @@ -531,1591 +552,1793 @@ #define ECORE_EVENT_SIGNAL_REALTIME 5 /**< Realtime signal event */ #define ECORE_EVENT_COUNT 6 - typedef struct _Ecore_Win32_Handler Ecore_Win32_Handler; /**< A handle for HANDLE handlers on Windows */ - typedef struct _Ecore_Event_Handler Ecore_Event_Handler; /**< A handle for an event handler */ - typedef struct _Ecore_Event_Filter Ecore_Event_Filter; /**< A handle for an event filter */ - typedef struct _Ecore_Event Ecore_Event; /**< A handle for an event */ - typedef struct _Ecore_Event_Signal_User Ecore_Event_Signal_User; /**< User signal event */ - typedef struct _Ecore_Event_Signal_Hup Ecore_Event_Signal_Hup; /**< Hup signal event */ - typedef struct _Ecore_Event_Signal_Exit Ecore_Event_Signal_Exit; /**< Exit signal event */ - typedef struct _Ecore_Event_Signal_Power Ecore_Event_Signal_Power; /**< Power signal event */ - typedef struct _Ecore_Event_Signal_Realtime Ecore_Event_Signal_Realtime; /**< Realtime signal event */ +typedef struct _Ecore_Win32_Handler Ecore_Win32_Handler; /**< A handle for HANDLE handlers on Windows */ +typedef struct _Ecore_Event_Handler Ecore_Event_Handler; /**< A handle for an event handler */ +typedef struct _Ecore_Event_Filter Ecore_Event_Filter; /**< A handle for an event filter */ +typedef struct _Ecore_Event Ecore_Event; /**< A handle for an event */ +typedef struct _Ecore_Event_Signal_User Ecore_Event_Signal_User; /**< User signal event */ +typedef struct _Ecore_Event_Signal_Hup Ecore_Event_Signal_Hup; /**< Hup signal event */ +typedef struct _Ecore_Event_Signal_Exit Ecore_Event_Signal_Exit; /**< Exit signal event */ +typedef struct _Ecore_Event_Signal_Power Ecore_Event_Signal_Power; /**< Power signal event */ +typedef struct _Ecore_Event_Signal_Realtime Ecore_Event_Signal_Realtime; /**< Realtime signal event */ - /** - * @typedef Ecore_Filter_Cb - * A callback used for filtering events from the main loop. - */ - typedef Eina_Bool (*Ecore_Filter_Cb) (void *data, void *loop_data, int type, void *event); +/** + * @typedef Ecore_Filter_Cb + * A callback used for filtering events from the main loop. + */ +typedef Eina_Bool (*Ecore_Filter_Cb)(void *data, void *loop_data, int type, void *event); - /** - * @typedef Ecore_End_Cb Ecore_End_Cb - * This is the callback which is called at the end of a function, - * usually for cleanup purposes. - */ - typedef void (*Ecore_End_Cb) (void *user_data, void *func_data); +/** + * @typedef Ecore_End_Cb Ecore_End_Cb + * This is the callback which is called at the end of a function, + * usually for cleanup purposes. + */ +typedef void (*Ecore_End_Cb)(void *user_data, void *func_data); - /** - * @typedef Ecore_Event_Handler_Cb Ecore_Event_Handler_Cb - * A callback used by the main loop to handle events of a specified - * type. - */ - typedef Eina_Bool (*Ecore_Event_Handler_Cb) (void *data, int type, void *event); +/** + * @typedef Ecore_Event_Handler_Cb Ecore_Event_Handler_Cb + * A callback used by the main loop to handle events of a specified + * type. + */ +typedef Eina_Bool (*Ecore_Event_Handler_Cb)(void *data, int type, void *event); - struct _Ecore_Event_Signal_User /** User signal event */ - { - int number; /**< The signal number. Either 1 or 2 */ - void *ext_data; /**< Extension data - not used */ +struct _Ecore_Event_Signal_User /** User signal event */ +{ + int number; /**< The signal number. Either 1 or 2 */ + void *ext_data; /**< Extension data - not used */ #if !defined (_WIN32) && !defined (__lv2ppu__) - siginfo_t data; /**< Signal info */ + siginfo_t data; /**< Signal info */ #endif - }; +}; - struct _Ecore_Event_Signal_Hup /** Hup signal event */ - { - void *ext_data; /**< Extension data - not used */ +struct _Ecore_Event_Signal_Hup /** Hup signal event */ +{ + void *ext_data; /**< Extension data - not used */ #if !defined (_WIN32) && !defined (__lv2ppu__) - siginfo_t data; /**< Signal info */ + siginfo_t data; /**< Signal info */ #endif - }; +}; - struct _Ecore_Event_Signal_Exit /** Exit request event */ - { - Eina_Bool interrupt : 1; /**< Set if the exit request was an interrupt signal*/ - Eina_Bool quit : 1; /**< set if the exit request was a quit signal */ - Eina_Bool terminate : 1; /**< Set if the exit request was a terminate singal */ - void *ext_data; /**< Extension data - not used */ +struct _Ecore_Event_Signal_Exit /** Exit request event */ +{ + Eina_Bool interrupt : 1; /**< Set if the exit request was an interrupt signal*/ + Eina_Bool quit : 1; /**< set if the exit request was a quit signal */ + Eina_Bool terminate : 1; /**< Set if the exit request was a terminate singal */ + void *ext_data; /**< Extension data - not used */ #if !defined (_WIN32) && !defined (__lv2ppu__) - siginfo_t data; /**< Signal info */ + siginfo_t data; /**< Signal info */ #endif - }; +}; - struct _Ecore_Event_Signal_Power /** Power event */ - { - void *ext_data; /**< Extension data - not used */ +struct _Ecore_Event_Signal_Power /** Power event */ +{ + void *ext_data; /**< Extension data - not used */ #if !defined (_WIN32) && !defined (__lv2ppu__) - siginfo_t data; /**< Signal info */ + siginfo_t data; /**< Signal info */ #endif - }; +}; - struct _Ecore_Event_Signal_Realtime /** Realtime event */ - { - int num; /**< The realtime signal's number */ +struct _Ecore_Event_Signal_Realtime /** Realtime event */ +{ + int num; /**< The realtime signal's number */ #if !defined (_WIN32) && !defined (__lv2ppu__) - siginfo_t data; /**< Signal info */ + siginfo_t data; /**< Signal info */ #endif - }; +}; - EAPI Ecore_Event_Handler *ecore_event_handler_add(int type, Ecore_Event_Handler_Cb func, const void *data); - EAPI void *ecore_event_handler_del(Ecore_Event_Handler *event_handler); - EAPI Ecore_Event *ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, void *data); - EAPI void *ecore_event_del(Ecore_Event *event); - EAPI void *ecore_event_handler_data_get(Ecore_Event_Handler *eh); - EAPI void *ecore_event_handler_data_set(Ecore_Event_Handler *eh, const void *data); - EAPI int ecore_event_type_new(void); - EAPI Ecore_Event_Filter *ecore_event_filter_add(Ecore_Data_Cb func_start, Ecore_Filter_Cb func_filter, Ecore_End_Cb func_end, const void *data); - EAPI void *ecore_event_filter_del(Ecore_Event_Filter *ef); - EAPI int ecore_event_current_type_get(void); - EAPI void *ecore_event_current_event_get(void); +EAPI Ecore_Event_Handler * +ecore_event_handler_add(int type, + Ecore_Event_Handler_Cb func, + const void *data); +EAPI void * + ecore_event_handler_del(Ecore_Event_Handler *event_handler); +EAPI Ecore_Event * + ecore_event_add(int type, + void *ev, + Ecore_End_Cb func_free, + void *data); +EAPI void * + ecore_event_del(Ecore_Event *event); +EAPI void * + ecore_event_handler_data_get(Ecore_Event_Handler *eh); +EAPI void * + ecore_event_handler_data_set(Ecore_Event_Handler *eh, + const void *data); +EAPI int + ecore_event_type_new(void); +EAPI Ecore_Event_Filter * + ecore_event_filter_add(Ecore_Data_Cb func_start, + Ecore_Filter_Cb func_filter, + Ecore_End_Cb func_end, + const void *data); +EAPI void * + ecore_event_filter_del(Ecore_Event_Filter *ef); +EAPI int + ecore_event_current_type_get(void); +EAPI void * + ecore_event_current_event_get(void); - /** - * @} - */ +/** + * @} + */ - /** - * @defgroup Ecore_Exe_Group Process Spawning Functions - * - * Functions that deal with and send signals to spawned processes. - * - * @ingroup Ecore_Main_Loop_Group - * - * @{ - */ +/** + * @defgroup Ecore_Exe_Group Process Spawning Functions + * + * Functions that deal with and send signals to spawned processes. + * + * @ingroup Ecore_Main_Loop_Group + * + * @{ + */ #define ECORE_EXE_PRIORITY_INHERIT 9999 - EAPI extern int ECORE_EXE_EVENT_ADD; /**< A child process has been added */ - EAPI extern int ECORE_EXE_EVENT_DEL; /**< A child process has been deleted (it exited, naming consistent with the rest of ecore). */ - EAPI extern int ECORE_EXE_EVENT_DATA; /**< Data from a child process. */ - EAPI extern int ECORE_EXE_EVENT_ERROR; /**< Errors from a child process. */ +EAPI extern int ECORE_EXE_EVENT_ADD; /**< A child process has been added */ +EAPI extern int ECORE_EXE_EVENT_DEL; /**< A child process has been deleted (it exited, naming consistent with the rest of ecore). */ +EAPI extern int ECORE_EXE_EVENT_DATA; /**< Data from a child process. */ +EAPI extern int ECORE_EXE_EVENT_ERROR; /**< Errors from a child process. */ - enum _Ecore_Exe_Flags /* flags for executing a child with its stdin and/or stdout piped back */ - { - ECORE_EXE_NONE = 0, /**< No exe flags at all */ - ECORE_EXE_PIPE_READ = 1, /**< Exe Pipe Read mask */ - ECORE_EXE_PIPE_WRITE = 2, /**< Exe Pipe Write mask */ - ECORE_EXE_PIPE_ERROR = 4, /**< Exe Pipe error mask */ - ECORE_EXE_PIPE_READ_LINE_BUFFERED = 8, /**< Reads are buffered until a newline and split 1 line per Ecore_Exe_Event_Data_Line */ - ECORE_EXE_PIPE_ERROR_LINE_BUFFERED = 16, /**< Errors are buffered until a newline and split 1 line per Ecore_Exe_Event_Data_Line */ - ECORE_EXE_PIPE_AUTO = 32, /**< stdout and stderr are buffered automatically */ - ECORE_EXE_RESPAWN = 64, /**< FIXME: Exe is restarted if it dies */ - ECORE_EXE_USE_SH = 128, /**< Use /bin/sh to run the command. */ - ECORE_EXE_NOT_LEADER = 256, /**< Do not use setsid() to have the executed process be its own session leader */ - ECORE_EXE_TERM_WITH_PARENT = 512 /**< Makes child receive SIGTERM when parent dies. */ - }; - typedef enum _Ecore_Exe_Flags Ecore_Exe_Flags; +enum _Ecore_Exe_Flags /* flags for executing a child with its stdin and/or stdout piped back */ +{ + ECORE_EXE_NONE = 0, /**< No exe flags at all */ + ECORE_EXE_PIPE_READ = 1, /**< Exe Pipe Read mask */ + ECORE_EXE_PIPE_WRITE = 2, /**< Exe Pipe Write mask */ + ECORE_EXE_PIPE_ERROR = 4, /**< Exe Pipe error mask */ + ECORE_EXE_PIPE_READ_LINE_BUFFERED = 8, /**< Reads are buffered until a newline and split 1 line per Ecore_Exe_Event_Data_Line */ + ECORE_EXE_PIPE_ERROR_LINE_BUFFERED = 16, /**< Errors are buffered until a newline and split 1 line per Ecore_Exe_Event_Data_Line */ + ECORE_EXE_PIPE_AUTO = 32, /**< stdout and stderr are buffered automatically */ + ECORE_EXE_RESPAWN = 64, /**< FIXME: Exe is restarted if it dies */ + ECORE_EXE_USE_SH = 128, /**< Use /bin/sh to run the command. */ + ECORE_EXE_NOT_LEADER = 256, /**< Do not use setsid() to have the executed process be its own session leader */ + ECORE_EXE_TERM_WITH_PARENT = 512 /**< Makes child receive SIGTERM when parent dies. */ +}; +typedef enum _Ecore_Exe_Flags Ecore_Exe_Flags; - enum _Ecore_Exe_Win32_Priority - { - ECORE_EXE_WIN32_PRIORITY_IDLE, /**< Idle priority, for monitoring the system */ - ECORE_EXE_WIN32_PRIORITY_BELOW_NORMAL, /**< Below default priority */ - ECORE_EXE_WIN32_PRIORITY_NORMAL, /**< Default priority */ - ECORE_EXE_WIN32_PRIORITY_ABOVE_NORMAL, /**< Above default priority */ - ECORE_EXE_WIN32_PRIORITY_HIGH, /**< High priority, use with care as other threads in the system will not get processor time */ - ECORE_EXE_WIN32_PRIORITY_REALTIME /**< Realtime priority, should be almost never used as it can interrupt system threads that manage mouse input, keyboard input, and background disk flushing */ - }; - typedef enum _Ecore_Exe_Win32_Priority Ecore_Exe_Win32_Priority; +enum _Ecore_Exe_Win32_Priority +{ + ECORE_EXE_WIN32_PRIORITY_IDLE, /**< Idle priority, for monitoring the system */ + ECORE_EXE_WIN32_PRIORITY_BELOW_NORMAL, /**< Below default priority */ + ECORE_EXE_WIN32_PRIORITY_NORMAL, /**< Default priority */ + ECORE_EXE_WIN32_PRIORITY_ABOVE_NORMAL, /**< Above default priority */ + ECORE_EXE_WIN32_PRIORITY_HIGH, /**< High priority, use with care as other threads in the system will not get processor time */ + ECORE_EXE_WIN32_PRIORITY_REALTIME /**< Realtime priority, should be almost never used as it can interrupt system threads that manage mouse input, keyboard input, and background disk flushing */ +}; +typedef enum _Ecore_Exe_Win32_Priority Ecore_Exe_Win32_Priority; - typedef struct _Ecore_Exe Ecore_Exe; /**< A handle for spawned processes */ +typedef struct _Ecore_Exe Ecore_Exe; /**< A handle for spawned processes */ - /** - * @typedef Ecore_Exe_Cb Ecore_Exe_Cb - * A callback to run with the associated @ref Ecore_Exe, usually - * for cleanup purposes. - */ - typedef void (*Ecore_Exe_Cb)(void *data, const Ecore_Exe *exe); +/** + * @typedef Ecore_Exe_Cb Ecore_Exe_Cb + * A callback to run with the associated @ref Ecore_Exe, usually + * for cleanup purposes. + */ +typedef void (*Ecore_Exe_Cb)(void *data, const Ecore_Exe *exe); - typedef struct _Ecore_Exe_Event_Add Ecore_Exe_Event_Add; /**< Spawned Exe add event */ - typedef struct _Ecore_Exe_Event_Del Ecore_Exe_Event_Del; /**< Spawned Exe exit event */ - typedef struct _Ecore_Exe_Event_Data_Line Ecore_Exe_Event_Data_Line; /**< Lines from a child process */ - typedef struct _Ecore_Exe_Event_Data Ecore_Exe_Event_Data; /**< Data from a child process */ +typedef struct _Ecore_Exe_Event_Add Ecore_Exe_Event_Add; /**< Spawned Exe add event */ +typedef struct _Ecore_Exe_Event_Del Ecore_Exe_Event_Del; /**< Spawned Exe exit event */ +typedef struct _Ecore_Exe_Event_Data_Line Ecore_Exe_Event_Data_Line; /**< Lines from a child process */ +typedef struct _Ecore_Exe_Event_Data Ecore_Exe_Event_Data; /**< Data from a child process */ - struct _Ecore_Exe_Event_Add /** Process add event */ - { - Ecore_Exe *exe; /**< The handle to the added process */ - void *ext_data; /**< Extension data - not used */ - }; +struct _Ecore_Exe_Event_Add /** Process add event */ +{ + Ecore_Exe *exe; /**< The handle to the added process */ + void *ext_data; /**< Extension data - not used */ +}; - struct _Ecore_Exe_Event_Del /** Process exit event */ - { - pid_t pid; /**< The process ID of the process that exited */ - int exit_code; /**< The exit code of the process */ - Ecore_Exe *exe; /**< The handle to the exited process, or NULL if not found */ - int exit_signal; /** < The signal that caused the process to exit */ - Eina_Bool exited : 1; /** < set to 1 if the process exited of its own accord */ - Eina_Bool signalled : 1; /** < set to 1 id the process exited due to uncaught signal */ - void *ext_data; /**< Extension data - not used */ +struct _Ecore_Exe_Event_Del /** Process exit event */ +{ + pid_t pid; /**< The process ID of the process that exited */ + int exit_code; /**< The exit code of the process */ + Ecore_Exe *exe; /**< The handle to the exited process, or NULL if not found */ + int exit_signal; /** < The signal that caused the process to exit */ + Eina_Bool exited : 1; /** < set to 1 if the process exited of its own accord */ + Eina_Bool signalled : 1; /** < set to 1 id the process exited due to uncaught signal */ + void *ext_data; /**< Extension data - not used */ #if !defined (_WIN32) && !defined (__lv2ppu__) - siginfo_t data; /**< Signal info */ + siginfo_t data; /**< Signal info */ #endif - }; +}; - struct _Ecore_Exe_Event_Data_Line /**< Lines from a child process */ - { - char *line; - int size; - }; +struct _Ecore_Exe_Event_Data_Line /**< Lines from a child process */ +{ + char *line; + int size; +}; - struct _Ecore_Exe_Event_Data /** Data from a child process event */ - { - Ecore_Exe *exe; /**< The handle to the process */ - void *data; /**< the raw binary data from the child process that was received */ - int size; /**< the size of this data in bytes */ - Ecore_Exe_Event_Data_Line *lines; /**< an array of line data if line buffered, the last one has it's line member set to NULL */ - }; +struct _Ecore_Exe_Event_Data /** Data from a child process event */ +{ + Ecore_Exe *exe; /**< The handle to the process */ + void *data; /**< the raw binary data from the child process that was received */ + int size; /**< the size of this data in bytes */ + Ecore_Exe_Event_Data_Line *lines; /**< an array of line data if line buffered, the last one has it's line member set to NULL */ +}; - EAPI void ecore_exe_run_priority_set(int pri); - EAPI int ecore_exe_run_priority_get(void); - EAPI Ecore_Exe *ecore_exe_run(const char *exe_cmd, const void *data); - EAPI Ecore_Exe *ecore_exe_pipe_run(const char *exe_cmd, Ecore_Exe_Flags flags, const void *data); - EAPI void ecore_exe_callback_pre_free_set(Ecore_Exe *exe, Ecore_Exe_Cb func); - EAPI Eina_Bool ecore_exe_send(Ecore_Exe *exe, const void *data, int size); - EAPI void ecore_exe_close_stdin(Ecore_Exe *exe); - EAPI void ecore_exe_auto_limits_set(Ecore_Exe *exe, int start_bytes, int end_bytes, int start_lines, int end_lines); - EAPI Ecore_Exe_Event_Data *ecore_exe_event_data_get(Ecore_Exe *exe, Ecore_Exe_Flags flags); - EAPI void ecore_exe_event_data_free(Ecore_Exe_Event_Data *data); - EAPI void *ecore_exe_free(Ecore_Exe *exe); - EAPI pid_t ecore_exe_pid_get(const Ecore_Exe *exe); - EAPI void ecore_exe_tag_set(Ecore_Exe *exe, const char *tag); - EAPI const char *ecore_exe_tag_get(const Ecore_Exe *exe); - EAPI const char *ecore_exe_cmd_get(const Ecore_Exe *exe); - EAPI void *ecore_exe_data_get(const Ecore_Exe *exe); - EAPI void *ecore_exe_data_set(Ecore_Exe *exe, void *data); - EAPI Ecore_Exe_Flags ecore_exe_flags_get(const Ecore_Exe *exe); - EAPI void ecore_exe_pause(Ecore_Exe *exe); - EAPI void ecore_exe_continue(Ecore_Exe *exe); - EAPI void ecore_exe_interrupt(Ecore_Exe *exe); - EAPI void ecore_exe_quit(Ecore_Exe *exe); - EAPI void ecore_exe_terminate(Ecore_Exe *exe); - EAPI void ecore_exe_kill(Ecore_Exe *exe); - EAPI void ecore_exe_signal(Ecore_Exe *exe, int num); - EAPI void ecore_exe_hup(Ecore_Exe *exe); +EAPI void + ecore_exe_run_priority_set(int pri); +EAPI int + ecore_exe_run_priority_get(void); +EAPI Ecore_Exe * + ecore_exe_run(const char *exe_cmd, + const void *data); +EAPI Ecore_Exe * +ecore_exe_pipe_run(const char *exe_cmd, + Ecore_Exe_Flags flags, + const void *data); +EAPI void +ecore_exe_callback_pre_free_set(Ecore_Exe *exe, + Ecore_Exe_Cb func); +EAPI Eina_Bool +ecore_exe_send(Ecore_Exe *exe, + const void *data, + int size); +EAPI void + ecore_exe_close_stdin(Ecore_Exe *exe); +EAPI void + ecore_exe_auto_limits_set(Ecore_Exe *exe, + int start_bytes, + int end_bytes, + int start_lines, + int end_lines); +EAPI Ecore_Exe_Event_Data * +ecore_exe_event_data_get(Ecore_Exe *exe, + Ecore_Exe_Flags flags); +EAPI void + ecore_exe_event_data_free(Ecore_Exe_Event_Data *data); +EAPI void * + ecore_exe_free(Ecore_Exe *exe); +EAPI pid_t + ecore_exe_pid_get(const Ecore_Exe *exe); +EAPI void + ecore_exe_tag_set(Ecore_Exe *exe, + const char *tag); +EAPI const char * + ecore_exe_tag_get(const Ecore_Exe *exe); +EAPI const char * + ecore_exe_cmd_get(const Ecore_Exe *exe); +EAPI void * + ecore_exe_data_get(const Ecore_Exe *exe); +EAPI void * + ecore_exe_data_set(Ecore_Exe *exe, + void *data); +EAPI Ecore_Exe_Flags + ecore_exe_flags_get(const Ecore_Exe *exe); +EAPI void + ecore_exe_pause(Ecore_Exe *exe); +EAPI void + ecore_exe_continue(Ecore_Exe *exe); +EAPI void + ecore_exe_interrupt(Ecore_Exe *exe); +EAPI void + ecore_exe_quit(Ecore_Exe *exe); +EAPI void + ecore_exe_terminate(Ecore_Exe *exe); +EAPI void + ecore_exe_kill(Ecore_Exe *exe); +EAPI void + ecore_exe_signal(Ecore_Exe *exe, + int num); +EAPI void +ecore_exe_hup(Ecore_Exe *exe); - /** - * @} - */ +/** + * @} + */ - /** - * @defgroup Ecore_FD_Handler_Group File Event Handling Functions - * - * Functions that deal with file descriptor handlers. - * - * The @ref Ecore_Fd_Handler can be used to watch a file descriptor - * for data available for reading, for the availability to write - * without blocking, and for errors on the file descriptor. - * - * ecore_main_fd_handler_add() is used to setup a handler for a - * given file descriptor. This file descriptor can be the standard - * input, a network socket, a stream received through some driver - * of a hardware decoder, etc. Thus it can contain errors, like a - * disconnection, a broken pipe, and so, and that's why it's - * possible to check for these errors with the @ref ECORE_FD_ERROR - * flag. - * - * An @ref Ecore_Fd_Handler can be used to watch on a file - * descriptor without blocking, still being able to receive events, - * expire timers, and other watch for other things that happen in - * the Ecore main loop. - * - * Example of use of a file descriptor handler: - * @li @ref ecore_fd_handler_example_c - * - * @ingroup Ecore_Main_Loop_Group - * - * @{ - */ +/** + * @defgroup Ecore_FD_Handler_Group File Event Handling Functions + * + * Functions that deal with file descriptor handlers. + * + * The @ref Ecore_Fd_Handler can be used to watch a file descriptor + * for data available for reading, for the availability to write + * without blocking, and for errors on the file descriptor. + * + * ecore_main_fd_handler_add() is used to setup a handler for a + * given file descriptor. This file descriptor can be the standard + * input, a network socket, a stream received through some driver + * of a hardware decoder, etc. Thus it can contain errors, like a + * disconnection, a broken pipe, and so, and that's why it's + * possible to check for these errors with the @ref ECORE_FD_ERROR + * flag. + * + * An @ref Ecore_Fd_Handler can be used to watch on a file + * descriptor without blocking, still being able to receive events, + * expire timers, and other watch for other things that happen in + * the Ecore main loop. + * + * Example of use of a file descriptor handler: + * @li @ref ecore_fd_handler_example_c + * + * @ingroup Ecore_Main_Loop_Group + * + * @{ + */ - typedef struct _Ecore_Fd_Handler Ecore_Fd_Handler; /**< A handle for Fd handlers */ +typedef struct _Ecore_Fd_Handler Ecore_Fd_Handler; /**< A handle for Fd handlers */ - enum _Ecore_Fd_Handler_Flags - { - ECORE_FD_READ = 1, /**< Fd Read mask */ - ECORE_FD_WRITE = 2, /**< Fd Write mask */ - ECORE_FD_ERROR = 4 /**< Fd Error mask */ - }; - typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags; +enum _Ecore_Fd_Handler_Flags +{ + ECORE_FD_READ = 1, /**< Fd Read mask */ + ECORE_FD_WRITE = 2, /**< Fd Write mask */ + ECORE_FD_ERROR = 4 /**< Fd Error mask */ +}; +typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_H... [truncated message content] |
From: Enlightenment S. <no-...@en...> - 2011-11-06 06:18:02
|
Log: fix but resulting from threadsafety addition by mike. Author: raster Date: 2011-11-05 23:17:56 -0700 (Sat, 05 Nov 2011) New Revision: 64798 Trac: http://trac.enlightenment.org/e/changeset/64798 Modified: trunk/ecore/src/lib/ecore/ecore_main.c Modified: trunk/ecore/src/lib/ecore/ecore_main.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_main.c 2011-11-06 06:16:31 UTC (rev 64797) +++ trunk/ecore/src/lib/ecore/ecore_main.c 2011-11-06 06:17:56 UTC (rev 64798) @@ -998,6 +998,7 @@ int err = errno; ERR("Failed to add poll on fd %d (errno = %d: %s)!", fd, err, strerror(err)); free(fdh); + fdh = NULL; goto unlock; } fdh->read_active = EINA_FALSE; |
From: Enlightenment S. <no-...@en...> - 2011-12-15 14:10:53
|
Log: see comments for info. a short workaround for now. Author: raster Date: 2011-12-15 06:10:42 -0800 (Thu, 15 Dec 2011) New Revision: 66258 Trac: http://trac.enlightenment.org/e/changeset/66258 Modified: trunk/ecore/src/lib/ecore/ecore.c Modified: trunk/ecore/src/lib/ecore/ecore.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore.c 2011-12-15 14:01:17 UTC (rev 66257) +++ trunk/ecore/src/lib/ecore/ecore.c 2011-12-15 14:10:42 UTC (rev 66258) @@ -217,14 +217,23 @@ EAPI int ecore_shutdown(void) { + Ecore_Pipe *p; /* * take a lock here because _ecore_event_shutdown() does callbacks */ _ecore_lock(); if (--_ecore_init_count != 0) goto unlock; - - ecore_pipe_del(_thread_call); + + /* this looks horrible - a hack for now, but something to note. as + * we delete the _thread_call pipe a thread COULD be doing + * ecore_pipe_write() or what not to it at the same time - we + * must ensure all possible users of this _thread_call are finished + * and exited before we delete it here */ + p = _thread_call; + _thread_call = NULL; + ecore_pipe_wait(p, 1, 0.1); + ecore_pipe_del(p); eina_lock_free(&_thread_safety); eina_condition_free(&_thread_cond); eina_lock_free(&_thread_mutex); |
From: Enlightenment S. <no-...@en...> - 2011-12-23 11:40:12
|
Log: disable bugfix for now. leave commented as note. Author: raster Date: 2011-12-23 03:40:05 -0800 (Fri, 23 Dec 2011) New Revision: 66477 Trac: http://trac.enlightenment.org/e/changeset/66477 Modified: trunk/ecore/src/lib/ecore/ecore.c Modified: trunk/ecore/src/lib/ecore/ecore.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore.c 2011-12-23 11:31:33 UTC (rev 66476) +++ trunk/ecore/src/lib/ecore/ecore.c 2011-12-23 11:40:05 UTC (rev 66477) @@ -217,7 +217,6 @@ EAPI int ecore_shutdown(void) { - Ecore_Pipe *p; /* * take a lock here because _ecore_event_shutdown() does callbacks */ @@ -225,15 +224,21 @@ if (--_ecore_init_count != 0) goto unlock; - /* this looks horrible - a hack for now, but something to note. as - * we delete the _thread_call pipe a thread COULD be doing - * ecore_pipe_write() or what not to it at the same time - we - * must ensure all possible users of this _thread_call are finished - * and exited before we delete it here */ + /* this looks horrible - a hack for now, but something to note. as + * we delete the _thread_call pipe a thread COULD be doing + * ecore_pipe_write() or what not to it at the same time - we + * must ensure all possible users of this _thread_call are finished + * and exited before we delete it here */ + /* + * ok - this causes other valgrind complaints regarding glib aquiring + * locks internally. so fix bug a or bug b. let's leave the original + * bug in then and leave this as a note for now + Ecore_Pipe *p; p = _thread_call; _thread_call = NULL; ecore_pipe_wait(p, 1, 0.1); ecore_pipe_del(p); + */ eina_lock_free(&_thread_safety); eina_condition_free(&_thread_cond); eina_lock_free(&_thread_mutex); |
From: Enlightenment S. <no-...@en...> - 2012-03-09 12:49:41
|
Log: hey cedric - i left this commented out, but this 2nd queue is wrong as the first handles cleaning up the direct worker. Author: raster Date: 2012-03-09 04:49:30 -0800 (Fri, 09 Mar 2012) New Revision: 69098 Trac: http://trac.enlightenment.org/e/changeset/69098 Modified: trunk/ecore/src/lib/ecore/ecore_thread.c Modified: trunk/ecore/src/lib/ecore/ecore_thread.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_thread.c 2012-03-09 12:00:28 UTC (rev 69097) +++ trunk/ecore/src/lib/ecore/ecore_thread.c 2012-03-09 12:49:30 UTC (rev 69098) @@ -573,7 +573,8 @@ LKI(work->mutex); CDI(work->cond, work->mutex); - ecore_main_loop_thread_safe_call_async(_ecore_thread_handler, work); +// don't queue this - this is deleted by _ecore_thread_kill() already deleting work->u.feedback_run.direct_worker +// ecore_main_loop_thread_safe_call_async(_ecore_thread_handler, work); return NULL; } @@ -987,7 +988,7 @@ worker->u.feedback_run.direct_worker = NULL; - if (!try_no_queue) + if (try_no_queue) { PH(t); |
From: Enlightenment S. <no-...@en...> - 2012-03-29 03:15:45
|
Log: let's use ()'s to group our logic better? Author: raster Date: 2012-03-28 20:15:36 -0700 (Wed, 28 Mar 2012) New Revision: 69712 Trac: http://trac.enlightenment.org/e/changeset/69712 Modified: trunk/ecore/src/lib/ecore/ecore_glib.c Modified: trunk/ecore/src/lib/ecore/ecore_glib.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_glib.c 2012-03-29 03:11:21 UTC (rev 69711) +++ trunk/ecore/src/lib/ecore/ecore_glib.c 2012-03-29 03:15:36 UTC (rev 69712) @@ -108,7 +108,7 @@ { GPollFD *itr = pfds, *itr_end = pfds + count; - for (; itr < itr_end && ready > 0; itr++) + for (; (itr < itr_end) && (ready > 0); itr++) { itr->revents = 0; if (FD_ISSET(itr->fd, rfds)) |
From: Enlightenment S. <no-...@en...> - 2012-03-29 08:43:24
|
Log: pur RAPI's on the .c file funcs.. TOO! so we can see which are api calls and whats internal! Author: raster Date: 2012-03-29 01:43:11 -0700 (Thu, 29 Mar 2012) New Revision: 69726 Trac: http://trac.enlightenment.org/e/changeset/69726 Modified: trunk/ecore/src/lib/ecore/ecore_getopt.c Modified: trunk/ecore/src/lib/ecore/ecore_getopt.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_getopt.c 2012-03-29 08:22:26 UTC (rev 69725) +++ trunk/ecore/src/lib/ecore/ecore_getopt.c 2012-03-29 08:43:11 UTC (rev 69726) @@ -671,7 +671,7 @@ * * Message will be print to stderr. */ -void +EAPI void ecore_getopt_help(FILE *fp, const Ecore_Getopt *parser) { @@ -1675,7 +1675,7 @@ * * @return EINA_TRUE if there are duplicates, EINA_FALSE otherwise. */ -Eina_Bool +EAPI Eina_Bool ecore_getopt_parser_has_duplicates(const Ecore_Getopt *parser) { const Ecore_Getopt_Desc *desc = parser->descs; @@ -1776,7 +1776,7 @@ * * @return index of first non-option parameter or -1 on error. */ -int +EAPI int ecore_getopt_parse(const Ecore_Getopt *parser, Ecore_Getopt_Value *values, int argc, @@ -1846,7 +1846,7 @@ * @param list pointer to list to be freed. * @return always NULL, so you can easily make your list head NULL. */ -Eina_List * +EAPI Eina_List * ecore_getopt_list_free(Eina_List *list) { void *data; @@ -1865,7 +1865,7 @@ * * @c callback_data value is ignored, you can safely use @c NULL. */ -Eina_Bool +EAPI Eina_Bool ecore_getopt_callback_geometry_parse(const Ecore_Getopt *parser __UNUSED__, const Ecore_Getopt_Desc *desc __UNUSED__, const char *str, @@ -1893,7 +1893,7 @@ * * @c callback_data value is ignored, you can safely use @c NULL. */ -Eina_Bool +EAPI Eina_Bool ecore_getopt_callback_size_parse(const Ecore_Getopt *parser __UNUSED__, const Ecore_Getopt_Desc *desc __UNUSED__, const char *str, |
From: Enlightenment S. <no-...@en...> - 2012-03-29 08:52:48
|
Log: main loop checks for all of ecore -> back. (removed by cedric last year) Author: raster Date: 2012-03-29 01:52:25 -0700 (Thu, 29 Mar 2012) New Revision: 69727 Trac: http://trac.enlightenment.org/e/changeset/69727 Modified: trunk/ecore/src/lib/ecore/ecore_anim.c trunk/ecore/src/lib/ecore/ecore_app.c trunk/ecore/src/lib/ecore/ecore_events.c trunk/ecore/src/lib/ecore/ecore_exe.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_thread.c trunk/ecore/src/lib/ecore/ecore_throttle.c trunk/ecore/src/lib/ecore/ecore_timer.c Modified: trunk/ecore/src/lib/ecore/ecore_anim.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_anim.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_anim.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -169,6 +169,7 @@ { Ecore_Animator *animator; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); animator = _ecore_animator_add(func, data); _ecore_unlock(); @@ -183,6 +184,7 @@ { Ecore_Animator *animator; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (runtime <= 0.0) runtime = 0.0; animator = _ecore_animator_add(_ecore_animator_run, NULL); @@ -321,6 +323,7 @@ { void *data = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!ECORE_MAGIC_CHECK(animator, ECORE_MAGIC_ANIMATOR)) { @@ -347,6 +350,7 @@ EAPI void ecore_animator_frametime_set(double frametime) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (frametime < 0.0) frametime = 0.0; if (animators_frametime == frametime) goto unlock; @@ -360,12 +364,14 @@ EAPI double ecore_animator_frametime_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0.0); return animators_frametime; } EAPI void ecore_animator_freeze(Ecore_Animator *animator) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (!ECORE_MAGIC_CHECK(animator, ECORE_MAGIC_ANIMATOR)) { @@ -382,6 +388,7 @@ EAPI void ecore_animator_thaw(Ecore_Animator *animator) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (!ECORE_MAGIC_CHECK(animator, ECORE_MAGIC_ANIMATOR)) { @@ -398,6 +405,7 @@ EAPI void ecore_animator_source_set(Ecore_Animator_Source source) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); src = source; _end_tick(); @@ -408,6 +416,7 @@ EAPI Ecore_Animator_Source ecore_animator_source_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); return src; } @@ -415,6 +424,7 @@ ecore_animator_custom_source_tick_begin_callback_set(Ecore_Cb func, const void *data) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); begin_tick_cb = func; begin_tick_data = data; @@ -427,6 +437,7 @@ ecore_animator_custom_source_tick_end_callback_set(Ecore_Cb func, const void *data) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); end_tick_cb = func; end_tick_data = data; @@ -438,6 +449,7 @@ EAPI void ecore_animator_custom_tick(void) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (src == ECORE_ANIMATOR_SOURCE_CUSTOM) _do_tick(); _ecore_unlock(); Modified: trunk/ecore/src/lib/ecore/ecore_app.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_app.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_app.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -78,6 +78,7 @@ EAPI void ecore_app_restart(void) { + EINA_MAIN_LOOP_CHECK_RETURN; #ifdef HAVE_EXECVP char *args[4096]; int i; Modified: trunk/ecore/src/lib/ecore/ecore_events.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_events.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_events.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -79,6 +79,7 @@ { Ecore_Event_Handler *eh = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!func) goto unlock; @@ -127,6 +128,7 @@ { void *data = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!ECORE_MAGIC_CHECK(event_handler, ECORE_MAGIC_EVENT_HANDLER)) { @@ -146,6 +148,7 @@ { void *data = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!ECORE_MAGIC_CHECK(eh, ECORE_MAGIC_EVENT_HANDLER)) { @@ -164,6 +167,7 @@ { void *old = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!ECORE_MAGIC_CHECK(eh, ECORE_MAGIC_EVENT_HANDLER)) { @@ -193,6 +197,7 @@ { Ecore_Event *event = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); /* if (!ev) goto unlock; */ @@ -210,6 +215,7 @@ { void *data = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!ECORE_MAGIC_CHECK(event, ECORE_MAGIC_EVENT)) { @@ -229,6 +235,7 @@ { int id; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); _ecore_lock(); id = event_id_max++; _ecore_unlock(); @@ -244,6 +251,7 @@ { Ecore_Event_Filter *ef = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!func_filter) goto unlock; ef = ecore_event_filter_calloc(1); @@ -264,6 +272,7 @@ { void *data = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!ECORE_MAGIC_CHECK(ef, ECORE_MAGIC_EVENT_FILTER)) { @@ -283,12 +292,14 @@ EAPI int ecore_event_current_type_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); return ecore_raw_event_type; } EAPI void * ecore_event_current_event_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); return ecore_raw_event_event; } Modified: trunk/ecore/src/lib/ecore/ecore_exe.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_exe.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_exe.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -344,6 +344,7 @@ EAPI void ecore_exe_run_priority_set(int pri) { + EINA_MAIN_LOOP_CHECK_RETURN; run_pri = pri; } @@ -359,6 +360,7 @@ EAPI int ecore_exe_run_priority_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); return run_pri; } @@ -375,6 +377,7 @@ ecore_exe_run(const char *exe_cmd, const void *data) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); return ecore_exe_pipe_run(exe_cmd, 0, data); } @@ -417,6 +420,7 @@ int ok = 1; int result; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!exe_cmd) return NULL; exe = calloc(1, sizeof(Ecore_Exe)); if (!exe) return NULL; @@ -709,6 +713,7 @@ ecore_exe_callback_pre_free_set(Ecore_Exe *exe, Ecore_Exe_Cb func) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, @@ -737,6 +742,7 @@ { void *buf; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(EINA_FALSE); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_send"); @@ -778,6 +784,7 @@ EAPI void ecore_exe_close_stdin(Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_close_stdin"); @@ -803,6 +810,7 @@ int start_lines, int end_lines) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_auto_limits_set"); @@ -869,6 +877,7 @@ unsigned char *inbuf; int inbuf_num; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_event_data_get"); @@ -995,6 +1004,7 @@ ecore_exe_tag_set(Ecore_Exe *exe, const char *tag) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_tag_set"); @@ -1021,6 +1031,7 @@ EAPI const char * ecore_exe_tag_get(const Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_tag_get"); @@ -1046,6 +1057,7 @@ int ok = 0; int result; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_free"); @@ -1120,6 +1132,7 @@ EAPI pid_t ecore_exe_pid_get(const Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_pid_get"); @@ -1138,6 +1151,7 @@ EAPI const char * ecore_exe_cmd_get(const Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_cmd_get"); @@ -1155,6 +1169,7 @@ EAPI void * ecore_exe_data_get(const Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_data_get"); @@ -1176,6 +1191,7 @@ void *data) { void *ret; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, __func__); @@ -1194,6 +1210,7 @@ EAPI Ecore_Exe_Flags ecore_exe_flags_get(const Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_data_get"); @@ -1209,6 +1226,7 @@ EAPI void ecore_exe_pause(Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_pause"); @@ -1224,6 +1242,7 @@ EAPI void ecore_exe_continue(Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_continue"); @@ -1239,6 +1258,7 @@ EAPI void ecore_exe_interrupt(Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_interrupt"); @@ -1255,6 +1275,7 @@ EAPI void ecore_exe_quit(Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_quit"); @@ -1271,6 +1292,7 @@ EAPI void ecore_exe_terminate(Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_terminate"); @@ -1290,6 +1312,7 @@ { struct _ecore_exe_dead_exe *dead; + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_kill"); @@ -1320,6 +1343,7 @@ ecore_exe_signal(Ecore_Exe *exe, int num) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_signal"); @@ -1338,6 +1362,7 @@ EAPI void ecore_exe_hup(Ecore_Exe *exe) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_hup"); Modified: trunk/ecore/src/lib/ecore/ecore_idle_enterer.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_idle_enterer.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_idle_enterer.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -47,6 +47,7 @@ { Ecore_Idle_Enterer *ie = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!func) goto unlock; @@ -77,6 +78,7 @@ { Ecore_Idle_Enterer *ie = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!func) goto unlock; @@ -102,6 +104,7 @@ { void *data; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(idle_enterer, ECORE_MAGIC_IDLE_ENTERER)) { ECORE_MAGIC_FAIL(idle_enterer, ECORE_MAGIC_IDLE_ENTERER, Modified: trunk/ecore/src/lib/ecore/ecore_idle_exiter.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_idle_exiter.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_idle_exiter.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -46,6 +46,7 @@ { Ecore_Idle_Exiter *ie = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!func) goto unlock; ie = ecore_idle_exiter_calloc(1); @@ -70,6 +71,7 @@ { void *data; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(idle_exiter, ECORE_MAGIC_IDLE_EXITER)) { ECORE_MAGIC_FAIL(idle_exiter, ECORE_MAGIC_IDLE_EXITER, Modified: trunk/ecore/src/lib/ecore/ecore_idler.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_idler.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_idler.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -31,6 +31,7 @@ { Ecore_Idler *ie = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!func) goto unlock; ie = ecore_idler_calloc(1); @@ -49,6 +50,7 @@ { void *data = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(idler, ECORE_MAGIC_IDLER)) { ECORE_MAGIC_FAIL(idler, ECORE_MAGIC_IDLER, Modified: trunk/ecore/src/lib/ecore/ecore_job.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_job.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_job.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -60,6 +60,7 @@ { Ecore_Job *job; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!func) return NULL; job = ecore_job_calloc(1); @@ -86,6 +87,7 @@ { void *data; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(job, ECORE_MAGIC_JOB)) { ECORE_MAGIC_FAIL(job, ECORE_MAGIC_JOB, Modified: trunk/ecore/src/lib/ecore/ecore_main.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_main.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_main.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -856,6 +856,7 @@ EAPI int ecore_main_loop_iterate_may_block(int may_block) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); #ifndef USE_G_MAIN_LOOP _ecore_lock(); in_main_loop++; @@ -870,6 +871,7 @@ EAPI void ecore_main_loop_iterate(void) { + EINA_MAIN_LOOP_CHECK_RETURN; #ifndef USE_G_MAIN_LOOP _ecore_lock(); _ecore_main_loop_iterate_internal(1); @@ -900,6 +902,7 @@ EAPI void ecore_main_loop_begin(void) { + EINA_MAIN_LOOP_CHECK_RETURN; #ifndef USE_G_MAIN_LOOP _ecore_lock(); in_main_loop++; @@ -928,6 +931,7 @@ EAPI void ecore_main_loop_quit(void) { + EINA_MAIN_LOOP_CHECK_RETURN; do_quit = 1; #ifdef USE_G_MAIN_LOOP if (ecore_main_loop) @@ -950,6 +954,7 @@ EAPI void ecore_main_loop_select_func_set(Ecore_Select_Function func) { + EINA_MAIN_LOOP_CHECK_RETURN; main_loop_select = func; } @@ -961,6 +966,7 @@ EAPI Ecore_Select_Function ecore_main_loop_select_func_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); return main_loop_select; } @@ -974,6 +980,7 @@ { Ecore_Fd_Handler *fdh = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if ((fd < 0) || (flags == 0) || (!func)) goto unlock; @@ -1019,6 +1026,7 @@ { Ecore_Win32_Handler *wh; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!h || !func) return NULL; wh = ecore_win32_handler_calloc(1); @@ -1050,6 +1058,7 @@ { void *ret = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) @@ -1068,6 +1077,7 @@ EAPI void * ecore_main_win32_handler_del(Ecore_Win32_Handler *win32_handler) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(win32_handler, ECORE_MAGIC_WIN32_HANDLER)) { ECORE_MAGIC_FAIL(win32_handler, ECORE_MAGIC_WIN32_HANDLER, @@ -1093,6 +1103,7 @@ Ecore_Fd_Prep_Cb func, const void *data) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) @@ -1116,6 +1127,7 @@ { int fd = -1; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(-1); _ecore_lock(); if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) @@ -1136,6 +1148,7 @@ { int ret = EINA_FALSE; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(EINA_FALSE); _ecore_lock(); if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) @@ -1158,6 +1171,7 @@ { int ret; + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) Modified: trunk/ecore/src/lib/ecore/ecore_pipe.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_pipe.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_pipe.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -125,6 +125,7 @@ Ecore_Pipe *p; int fds[2]; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!handler) return NULL; p = ecore_pipe_calloc(1); @@ -162,6 +163,7 @@ { void *data; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE)) { ECORE_MAGIC_FAIL(p, ECORE_MAGIC_PIPE, "ecore_pipe_del"); @@ -185,6 +187,7 @@ EAPI void ecore_pipe_read_close(Ecore_Pipe *p) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE)) { ECORE_MAGIC_FAIL(p, ECORE_MAGIC_PIPE, "ecore_pipe_read_close"); @@ -212,6 +215,7 @@ EAPI void ecore_pipe_freeze(Ecore_Pipe *p) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE)) { ECORE_MAGIC_FAIL(p, ECORE_MAGIC_PIPE, "ecore_pipe_read_freeze"); @@ -235,6 +239,7 @@ EAPI void ecore_pipe_thaw(Ecore_Pipe *p) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE)) { ECORE_MAGIC_FAIL(p, ECORE_MAGIC_PIPE, "ecore_pipe_read_thaw"); @@ -273,6 +278,7 @@ int ret; int total = 0; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(-1); if (p->fd_read == PIPE_FD_INVALID) return -1; @@ -280,7 +286,7 @@ FD_SET(p->fd_read, &rset); if (wait >= 0.0) - end = ecore_time_get() + wait; + end = ecore_loop_time_get() + wait; timeout = wait; while (message_count > 0 && (timeout > 0.0 || wait <= 0.0)) @@ -335,7 +341,7 @@ } if (wait >= 0.0) - timeout = end - ecore_time_get(); + timeout = end - ecore_loop_time_get(); } return total; Modified: trunk/ecore/src/lib/ecore/ecore_poll.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_poll.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_poll.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -193,6 +193,7 @@ ecore_poller_poll_interval_set(Ecore_Poller_Type type __UNUSED__, double poll_time) { + EINA_MAIN_LOOP_CHECK_RETURN; poll_interval = poll_time; _ecore_poller_next_tick_eval(); } @@ -200,6 +201,7 @@ EAPI double ecore_poller_poll_interval_get(Ecore_Poller_Type type __UNUSED__) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0.0); return poll_interval; } @@ -212,6 +214,7 @@ Ecore_Poller *poller; int ibit; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!func) return NULL; if (interval < 1) interval = 1; @@ -246,6 +249,7 @@ { int ibit; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(EINA_FALSE); if (!ECORE_MAGIC_CHECK(poller, ECORE_MAGIC_POLLER)) { ECORE_MAGIC_FAIL(poller, ECORE_MAGIC_POLLER, @@ -281,6 +285,7 @@ { int ibit, interval = 1; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); if (!ECORE_MAGIC_CHECK(poller, ECORE_MAGIC_POLLER)) { ECORE_MAGIC_FAIL(poller, ECORE_MAGIC_POLLER, @@ -302,6 +307,7 @@ { void *data; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!ECORE_MAGIC_CHECK(poller, ECORE_MAGIC_POLLER)) { ECORE_MAGIC_FAIL(poller, ECORE_MAGIC_POLLER, Modified: trunk/ecore/src/lib/ecore/ecore_thread.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_thread.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_thread.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -265,7 +265,7 @@ CDD(worker->cond); LKD(worker->mutex); - if (_ecore_thread_worker_count > (_ecore_thread_count_max + 1) * 16) + if (_ecore_thread_worker_count > ((_ecore_thread_count_max + 1) * 16)) { free(worker); return; @@ -762,6 +762,8 @@ Ecore_Pthread_Data *pth = NULL; #endif + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); + if (!func_blocking) return NULL; work = _ecore_thread_worker_new(); @@ -975,6 +977,8 @@ Ecore_Pthread_Worker *worker; Ecore_Pthread_Data *pth = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); + if (!func_heavy) return NULL; worker = _ecore_thread_worker_new(); @@ -1251,6 +1255,7 @@ ecore_thread_active_get(void) { #ifdef EFL_HAVE_THREADS + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); return _ecore_thread_count; #else return 0; @@ -1263,6 +1268,7 @@ #ifdef EFL_HAVE_THREADS int ret; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); LKL(_ecore_pending_job_threads_mutex); ret = eina_list_count(_ecore_pending_job_threads); LKU(_ecore_pending_job_threads_mutex); @@ -1278,6 +1284,7 @@ #ifdef EFL_HAVE_THREADS int ret; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); LKL(_ecore_pending_job_threads_mutex); ret = eina_list_count(_ecore_pending_job_threads_feedback); LKU(_ecore_pending_job_threads_mutex); @@ -1293,6 +1300,7 @@ #ifdef EFL_HAVE_THREADS int ret; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); LKL(_ecore_pending_job_threads_mutex); ret = eina_list_count(_ecore_pending_job_threads) + eina_list_count(_ecore_pending_job_threads_feedback); LKU(_ecore_pending_job_threads_mutex); @@ -1305,12 +1313,14 @@ EAPI int ecore_thread_max_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); return _ecore_thread_count_max; } EAPI void ecore_thread_max_set(int num) { + EINA_MAIN_LOOP_CHECK_RETURN; if (num < 1) return; /* avoid doing something hilarious by blocking dumb users */ if (num >= (2 * eina_cpu_count())) return; @@ -1321,6 +1331,7 @@ EAPI void ecore_thread_max_reset(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); _ecore_thread_count_max = eina_cpu_count(); } Modified: trunk/ecore/src/lib/ecore/ecore_throttle.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_throttle.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_throttle.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -66,6 +66,7 @@ EAPI void ecore_throttle_adjust(double amount) { + EINA_MAIN_LOOP_CHECK_RETURN; int adj = amount * 1000000.0; throttle_val += adj; if (throttle_val < 0) throttle_val = 0; @@ -83,6 +84,7 @@ EAPI double ecore_throttle_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0.0); return (double)throttle_val / 1000000.0; } Modified: trunk/ecore/src/lib/ecore/ecore_timer.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_timer.c 2012-03-29 08:43:11 UTC (rev 69726) +++ trunk/ecore/src/lib/ecore/ecore_timer.c 2012-03-29 08:52:25 UTC (rev 69727) @@ -69,6 +69,7 @@ EAPI double ecore_timer_precision_get(void) { + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0.0); return precision; } @@ -100,6 +101,7 @@ EAPI void ecore_timer_precision_set(double value) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (value < 0.0) @@ -139,6 +141,7 @@ double now; Ecore_Timer *timer = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!func) goto unlock; if (in < 0.0) in = 0.0; @@ -177,6 +180,7 @@ { Ecore_Timer *timer; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); timer = _ecore_timer_loop_add(in, func, data); _ecore_unlock(); @@ -198,6 +202,7 @@ { void *data = NULL; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); _ecore_lock(); if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) @@ -225,6 +230,7 @@ ecore_timer_interval_set(Ecore_Timer *timer, double in) { + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) @@ -249,6 +255,7 @@ { double interval; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0.0); _ecore_lock(); if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) @@ -276,6 +283,7 @@ ecore_timer_delay(Ecore_Timer *timer, double add) { + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, @@ -302,6 +310,7 @@ ecore_timer_reset(Ecore_Timer *timer) { double now, add; + EINA_MAIN_LOOP_CHECK_RETURN; if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, @@ -331,6 +340,7 @@ double now; double ret = 0.0; + EINA_MAIN_LOOP_CHECK_RETURN_VAL(0.0); _ecore_lock(); if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) @@ -370,6 +380,7 @@ { double now; + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) @@ -413,6 +424,7 @@ { double now; + EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) @@ -445,6 +457,7 @@ int living_timer = 0; int unknow_timer = 0; + EINA_MAIN_LOOP_CHECK_RETURN(NULL); _ecore_lock(); result = eina_strbuf_new(); |
From: Enlightenment S. <no-...@en...> - 2012-03-29 08:56:17
|
Log: and kill warnings (-Wshadow) in ecore_getopt. pointed out that ecore_getopt_help() cant be called from a thread either in the process. Author: raster Date: 2012-03-29 01:56:10 -0700 (Thu, 29 Mar 2012) New Revision: 69728 Trac: http://trac.enlightenment.org/e/changeset/69728 Modified: trunk/ecore/src/lib/ecore/ecore_getopt.c Modified: trunk/ecore/src/lib/ecore/ecore_getopt.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_getopt.c 2012-03-29 08:52:25 UTC (rev 69727) +++ trunk/ecore/src/lib/ecore/ecore_getopt.c 2012-03-29 08:56:10 UTC (rev 69728) @@ -46,8 +46,8 @@ #include "Ecore_Getopt.h" static const char *prog = NULL; -static char **argv = NULL; -static int argc = 0; +static char **_argv = NULL; +static int _argc = 0; static int cols = 80; static int helpcol = 80 / 3; @@ -677,13 +677,14 @@ { const char *var; + EINA_MAIN_LOOP_CHECK_RETURN; if (!parser) return; - if (argc < 1) + if (_argc < 1) { - ecore_app_args_get(&argc, &argv); - if ((argc > 0) && (argv[0])) - prog = argv[0]; + ecore_app_args_get(&_argc, &_argv); + if ((_argc > 0) && (_argv[0])) + prog = _argv[0]; else prog = parser->prog; } |
From: Enlightenment S. <no-...@en...> - 2012-03-29 09:25:59
|
Log: remvoe unused func too Author: raster Date: 2012-03-29 02:25:48 -0700 (Thu, 29 Mar 2012) New Revision: 69733 Trac: http://trac.enlightenment.org/e/changeset/69733 Modified: trunk/ecore/src/lib/ecore/ecore_thread.c Modified: trunk/ecore/src/lib/ecore/ecore_thread.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_thread.c 2012-03-29 09:21:32 UTC (rev 69732) +++ trunk/ecore/src/lib/ecore/ecore_thread.c 2012-03-29 09:25:48 UTC (rev 69733) @@ -735,22 +735,6 @@ #endif } -void -_ecore_thread_assert_main_loop_thread(const char *function) -{ - Eina_Bool good; -#ifdef EFL_HAVE_THREADS - good = PHE(get_main_loop_thread(), PHS()); -#else - good = EINA_TRUE; -#endif - if (!good) - { - EINA_LOG_CRIT("Call to %s from wrong thread!", function); - abort(); - } -} - EAPI Ecore_Thread * ecore_thread_run(Ecore_Thread_Cb func_blocking, Ecore_Thread_Cb func_end, |
From: Enlightenment S. <no-...@en...> - 2012-03-29 10:36:35
|
Log: From: ?\236?\157?\180?\235?\179?\145?\236?\154?\176 <bw8...@sa...> I found a bug in ecore main loop while debuging cpu 100% issue on RSS application. 1. [RSS] RSS application register two io watch callbacks(for G_IO_IN, G_IO_OUT seperately) for a GIOChannel with g_io_add_watch(). 2. [ecore] In _ecore_glib_context_query() function, g_main_context_query() returns a fd list, and it has 2 fd items for the GIOChannel (channel id = 20). itr[0] (16, 1, 0) itr[1] (15, 1, 0) itr[2] (20, 1, 0) (G_IO_IN, 0) itr[3] (20, 4, 0) (G_IO_OUT, 0) itr[4] (18, 1, 0) 3. [ecore] In _ecore_glib_context_poll_from() function, create read, write, exception fd list according to the events flags of each fd item. [6 15 16 18 20], [20], [] 4. [ecore] in _ecore_glib_select__locked() function, get active fd number from select() call select(21, [6 15 16 18 20], [20], [], NULL) = 1 (out [20]) 5. [ecore] In _ecore_glib_context_poll_to() function, there is a bug on setting revents flag. (because of incorrect condition check - currently, the logic of the function cannot handle this case) itr[0] (16, 1, 0) itr[1] (15, 1, 0) itr[2] (20, 1, 4) (set incorrectly) itr[3] (20, 4, 0) => this should be set as (20, 4, 4)!!!! itr[4] (18, 1, 0) 6. [ecore] In _ecore_glib_select__locked(), g_main_context_check() function returns false because of the above bug, so g_main_context_dispatch() function will not be called. >> After this, the 2~6 flow is executed repeatedly on ecore main loop (because 20 out is still active fd) and this makes cpu 100% problem. Author: raster Date: 2012-03-29 03:36:23 -0700 (Thu, 29 Mar 2012) New Revision: 69739 Trac: http://trac.enlightenment.org/e/changeset/69739 Modified: trunk/ecore/src/lib/ecore/ecore_glib.c Modified: trunk/ecore/src/lib/ecore/ecore_glib.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_glib.c 2012-03-29 10:08:37 UTC (rev 69738) +++ trunk/ecore/src/lib/ecore/ecore_glib.c 2012-03-29 10:36:23 UTC (rev 69739) @@ -111,17 +111,17 @@ for (; (itr < itr_end) && (ready > 0); itr++) { itr->revents = 0; - if (FD_ISSET(itr->fd, rfds)) + if (FD_ISSET(itr->fd, rfds) && (itr->events & G_IO_IN)) { itr->revents |= G_IO_IN; ready--; } - if (FD_ISSET(itr->fd, wfds)) + if (FD_ISSET(itr->fd, wfds) && (itr->events & G_IO_OUT)) { itr->revents |= G_IO_OUT; ready--; } - if (FD_ISSET(itr->fd, efds)) + if (FD_ISSET(itr->fd, efds) && (itr->events & (G_IO_HUP | G_IO_ERR))) { itr->revents |= G_IO_ERR; ready--; |
From: Enlightenment S. <no-...@en...> - 2012-03-29 11:06:11
|
Log: try fix to refactor of ecore where thread_count went negative as it was --'d when a no_queue thread finished too. Author: raster Date: 2012-03-29 04:05:59 -0700 (Thu, 29 Mar 2012) New Revision: 69741 Trac: http://trac.enlightenment.org/e/changeset/69741 Modified: trunk/ecore/src/lib/ecore/ecore_thread.c Modified: trunk/ecore/src/lib/ecore/ecore_thread.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_thread.c 2012-03-29 11:04:06 UTC (rev 69740) +++ trunk/ecore/src/lib/ecore/ecore_thread.c 2012-03-29 11:05:59 UTC (rev 69741) @@ -289,7 +289,10 @@ { Ecore_Pthread_Worker *worker = (Ecore_Pthread_Worker *)work; - if (!worker->message_run || !worker->feedback_run || (worker->feedback_run && !worker->no_queue)) + if (((!worker->message_run) || + (!worker->feedback_run) || + ((worker->feedback_run) && (!worker->no_queue))) && + (!worker->no_queue)) _ecore_thread_count--; if (PHJ(pth->thread) != 0) @@ -578,7 +581,7 @@ end->cancel = EINA_FALSE; end->feedback_run = EINA_FALSE; end->message_run = EINA_FALSE; - end->no_queue = EINA_FALSE; +// end->no_queue = EINA_FALSE; end->kill = EINA_FALSE; end->hash = NULL; LKI(end->mutex); @@ -641,7 +644,7 @@ work->feedback_run = EINA_FALSE; work->message_run = EINA_FALSE; work->kill = EINA_FALSE; - work->no_queue = EINA_FALSE; +// work->no_queue = EINA_FALSE; work->hash = NULL; ecore_main_loop_thread_safe_call_async(_ecore_thread_handler, work); |
From: Enlightenment S. <no-...@en...> - 2012-04-25 09:16:54
|
Log: fix valgrind bitch about uniittied mem! Author: raster Date: 2012-04-25 02:16:43 -0700 (Wed, 25 Apr 2012) New Revision: 70461 Trac: http://trac.enlightenment.org/e/changeset/70461 Modified: trunk/ecore/src/lib/ecore/ecore_thread.c Modified: trunk/ecore/src/lib/ecore/ecore_thread.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_thread.c 2012-04-25 08:56:25 UTC (rev 70460) +++ trunk/ecore/src/lib/ecore/ecore_thread.c 2012-04-25 09:16:43 UTC (rev 70461) @@ -662,7 +662,7 @@ result = eina_trash_pop(&_ecore_thread_worker_trash); - if (!result) result = malloc(sizeof (Ecore_Pthread_Worker)); + if (!result) result = calloc(1, sizeof(Ecore_Pthread_Worker)); else _ecore_thread_worker_count--; LKI(result->cancel_mutex); |
From: Enlightenment S. <no-...@en...> - 2012-05-24 10:13:41
|
Log: ok ok - doesnt make a difference.. but only limit if MORE than 16xcpu count Author: raster Date: 2012-05-24 03:13:30 -0700 (Thu, 24 May 2012) New Revision: 71409 Trac: http://trac.enlightenment.org/e/changeset/71409 Modified: trunk/ecore/src/lib/ecore/ecore_thread.c Modified: trunk/ecore/src/lib/ecore/ecore_thread.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_thread.c 2012-05-24 10:08:59 UTC (rev 71408) +++ trunk/ecore/src/lib/ecore/ecore_thread.c 2012-05-24 10:13:30 UTC (rev 71409) @@ -1181,7 +1181,7 @@ EINA_MAIN_LOOP_CHECK_RETURN; if (num < 1) return; /* avoid doing something hilarious by blocking dumb users */ - if (num >= (16 * eina_cpu_count())) num = 16 * eina_cpu_count(); + if (num > (16 * eina_cpu_count())) num = 16 * eina_cpu_count(); _ecore_thread_count_max = num; } |
From: Enlightenment S. <no-...@en...> - 2012-05-31 13:32:20
|
Log: i wonder if this patches over some odd signal processing hang i see in edje_cc! :( Author: raster Date: 2012-05-31 06:32:09 -0700 (Thu, 31 May 2012) New Revision: 71583 Trac: http://trac.enlightenment.org/e/changeset/71583 Modified: trunk/ecore/src/lib/ecore/ecore_signal.c Modified: trunk/ecore/src/lib/ecore/ecore_signal.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_signal.c 2012-05-31 13:09:13 UTC (rev 71582) +++ trunk/ecore/src/lib/ecore/ecore_signal.c 2012-05-31 13:32:09 UTC (rev 71583) @@ -145,6 +145,7 @@ { volatile sig_atomic_t n; sigset_t oldset, newset; + int tot; if (sig_count == 0) return; sigemptyset(&newset); @@ -164,6 +165,19 @@ if (sigchld_count > MAXSIGQ) WRN("%i SIGCHLD in queue. max queue size %i. losing " "siginfo for extra signals.", sigchld_count, MAXSIGQ); + tot = sigchld_count + sigusr1_count + sigusr2_count + + sighup_count + sigquit_count + sigint_count + sigterm_count +#ifdef SIGPWR + + sigpwr_count +#endif + ; + + if (sig_count != tot) + { + ERR("sig_count (%i) != actual totals (%i) ", sig_count, tot); + sig_count = tot; + } + for (n = 0; n < sigchld_count; n++) { pid_t pid; @@ -391,7 +405,8 @@ } sigpwr_count = 0; #endif - + sig_count = 0; + sigprocmask(SIG_SETMASK, &oldset, NULL); } |
From: Enlightenment S. <no-...@en...> - 2012-07-18 11:54:39
|
Log: add warning if u dont have process priority swizzling. Author: raster Date: 2012-07-18 04:54:32 -0700 (Wed, 18 Jul 2012) New Revision: 74060 Trac: http://trac.enlightenment.org/e/changeset/74060 Modified: trunk/ecore/src/lib/ecore/ecore_exe.c Modified: trunk/ecore/src/lib/ecore/ecore_exe.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore_exe.c 2012-07-18 11:43:02 UTC (rev 74059) +++ trunk/ecore/src/lib/ecore/ecore_exe.c 2012-07-18 11:54:32 UTC (rev 74060) @@ -487,8 +487,14 @@ { if (run_pri != ECORE_EXE_PRIORITY_INHERIT) { +#ifdef PRIO_PROCESS if ((run_pri >= -20) && (run_pri <= 19)) setpriority(PRIO_PROCESS, 0, run_pri); +#else +#warning "Your OS/libc does not provide PRIO_PROCESS (and possibly setpriority())" +#warning "This is a POSIX-1.2001 standard and it is highly encouraged that you" +#warning "Have support for this" +#endif } /* dup2 STDERR, STDIN, and STDOUT. dup2() allegedly closes the * second pipe if it's open. On the other hand, there was the |
From: Enlightenment S. <no-...@en...> - 2012-07-20 09:42:22
|
Log: add docs for exe line buffer. Author: raster Date: 2012-07-20 02:42:11 -0700 (Fri, 20 Jul 2012) New Revision: 74227 Trac: http://trac.enlightenment.org/e/changeset/74227 Modified: trunk/ecore/src/lib/ecore/Ecore.h Modified: trunk/ecore/src/lib/ecore/Ecore.h =================================================================== --- trunk/ecore/src/lib/ecore/Ecore.h 2012-07-20 09:40:03 UTC (rev 74226) +++ trunk/ecore/src/lib/ecore/Ecore.h 2012-07-20 09:42:11 UTC (rev 74227) @@ -930,8 +930,8 @@ struct _Ecore_Exe_Event_Data_Line /**< Lines from a child process */ { - char *line; - int size; + char *line; /**< The bytes of a line of buffered data */ + int size; /**< The size odf the line buffer in bytes */ }; struct _Ecore_Exe_Event_Data /** Data from a child process event */ |
From: Enlightenment S. <no-...@en...> - 2012-08-13 02:53:57
|
Log: docs + @since for ecore_fork() Author: raster Date: 2012-08-12 19:53:48 -0700 (Sun, 12 Aug 2012) New Revision: 75182 Trac: http://trac.enlightenment.org/e/changeset/75182 Modified: trunk/ecore/src/lib/ecore/Ecore.h Modified: trunk/ecore/src/lib/ecore/Ecore.h =================================================================== --- trunk/ecore/src/lib/ecore/Ecore.h 2012-08-12 23:57:43 UTC (rev 75181) +++ trunk/ecore/src/lib/ecore/Ecore.h 2012-08-13 02:53:48 UTC (rev 75182) @@ -380,6 +380,23 @@ EAPI int ecore_init(void); EAPI int ecore_shutdown(void); +/** + * Reset the ecore internal state after a fork + * + * Ecore maintains internal data that can be affected by the fork() system call + * which creates a duplicate of the current process. This also duplicates + * file descriptors which is problematic in that these file descriptors still + * point to their original sources. This function makes ecore reset internal + * state (e.g. pipes used for signalling between threads) so they function + * correctly afterwards. + * + * It is highly suggested that you call this function after any fork() + * system call inside the child process if you intend to use ecore features + * after this point and not call any exec() family functions. Not doing so + * will cause possible misbehaviour. + * + * @since 1.7 + */ EAPI void ecore_fork_reset(void); /** |