summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/sys/eventhandler.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/sys/eventhandler.h b/sys/sys/eventhandler.h
index 601b7db..3fc4060 100644
--- a/sys/sys/eventhandler.h
+++ b/sys/sys/eventhandler.h
@@ -79,13 +79,15 @@ struct __hack
do { \
struct eventhandler_list *_el = &Xeventhandler_list_ ## name ; \
struct eventhandler_entry *_ep = TAILQ_FIRST(&(_el->el_entries)); \
+ struct eventhandler_entry *_en; \
\
if (_el->el_flags & EHE_INITTED) { \
mtx_enter(&_el->el_mutex, MTX_DEF); \
while (_ep != NULL) { \
+ _en = TAILQ_NEXT(_ep, ee_link); \
((struct eventhandler_entry_ ## name *)_ep)->eh_func(_ep->ee_arg , \
## args); \
- _ep = TAILQ_NEXT(_ep, ee_link); \
+ _ep = _en; \
} \
mtx_exit(&_el->el_mutex, MTX_DEF); \
} \
@@ -115,16 +117,17 @@ struct __hack
#define EVENTHANDLER_INVOKE(name, args...) \
do { \
struct eventhandler_list *_el; \
- struct eventhandler_entry *_ep; \
+ struct eventhandler_entry *_ep, *_en; \
\
if (((_el = eventhandler_find_list(#name)) != NULL) && \
(_el->el_flags & EHE_INITTED)) { \
mtx_enter(&_el->el_mutex, MTX_DEF); \
- for (_ep = TAILQ_FIRST(&(_el->el_entries)); \
- _ep != NULL; \
- _ep = TAILQ_NEXT(_ep, ee_link)) { \
+ _ep = TAILQ_FIRST(&(_el->el_entries)); \
+ while (_ep != NULL) { \
+ _en = TAILQ_NEXT(_ep, ee_link); \
((struct eventhandler_entry_ ## name *)_ep)->eh_func(_ep->ee_arg , \
## args); \
+ _ep = _en; \
} \
mtx_exit(&_el->el_mutex, MTX_DEF); \
} \
@@ -169,6 +172,7 @@ EVENTHANDLER_DECLARE(shutdown_final, shutdown_fn);
/* Idle process event */
typedef void (*idle_eventhandler_t) __P((void *, int));
+#define IDLE_PRI_FIRST 10000
#define IDLE_PRI_LAST 20000
EVENTHANDLER_FAST_DECLARE(idle_event, idle_eventhandler_t);
OpenPOWER on IntegriCloud