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
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,
if (ev->fin != NULL) {
ev->fin (ev->user_data);
}
- }
+ });
kh_clear (rspamd_events_hash, session->events);
}