summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/libucl/khash.h8
-rw-r--r--src/libserver/events.c8
2 files changed, 10 insertions, 6 deletions
diff --git a/contrib/libucl/khash.h b/contrib/libucl/khash.h
index a91db5b2a..3e580011d 100644
--- a/contrib/libucl/khash.h
+++ b/contrib/libucl/khash.h
@@ -583,6 +583,14 @@ static kh_inline khint_t __ac_Wang_hash(khint_t key)
code; \
} }
+#define kh_foreach_key(h, kvar, code) { \
+ khint_t __i; \
+ for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \
+ if (!kh_exist(h,__i)) continue; \
+ (kvar) = kh_key(h,__i); \
+ code; \
+ } }
+
/* More conenient interfaces */
/*! @function
diff --git a/src/libserver/events.c b/src/libserver/events.c
index bff35351f..c23c90328 100644
--- a/src/libserver/events.c
+++ b/src/libserver/events.c
@@ -309,17 +309,13 @@ void
rspamd_session_cleanup (struct rspamd_async_session *session)
{
struct rspamd_async_event *ev;
- int i;
if (session == NULL) {
msg_err ("session is NULL");
return;
}
- for (i = kh_begin (session->events); i != kh_end (session->events); i ++) {
- if (!kh_exist (session->events, i)) continue;
- ev = kh_key (session->events, i);
-
+ kh_foreach_key (session->events, ev, {
/* Call event's finalizer */
msg_debug_session ("removed event on destroy: %p, subsystem: %s",
ev->user_data,
@@ -328,7 +324,7 @@ rspamd_session_cleanup (struct rspamd_async_session *session)
if (ev->fin != NULL) {
ev->fin (ev->user_data);
}
- }
+ });
kh_clear (rspamd_events_hash, session->events);
}