From: Mikhail Galanin Date: Wed, 15 Aug 2018 14:09:36 +0000 (+0100) Subject: [Minor] kh_foreach should not be used with hash sets, it couses segfault on -O0 ... X-Git-Tag: 1.8.0~257^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=65ebfc1f05358ed000e33c8a09c4df1fc0138255;p=rspamd.git [Minor] kh_foreach should not be used with hash sets, it couses segfault on -O0 -fno-omit-frame-pointer. See kh_val() description --- diff --git a/src/libserver/events.c b/src/libserver/events.c index f62005b96..bff35351f 100644 --- a/src/libserver/events.c +++ b/src/libserver/events.c @@ -309,14 +309,17 @@ void rspamd_session_cleanup (struct rspamd_async_session *session) { struct rspamd_async_event *ev; - gchar t; + int i; if (session == NULL) { msg_err ("session is NULL"); return; } - kh_foreach (session->events, ev, t, { + 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); + /* Call event's finalizer */ msg_debug_session ("removed event on destroy: %p, subsystem: %s", ev->user_data, @@ -325,9 +328,7 @@ rspamd_session_cleanup (struct rspamd_async_session *session) if (ev->fin != NULL) { ev->fin (ev->user_data); } - }); - - (void)t; + } kh_clear (rspamd_events_hash, session->events); }