From: Lennart Poettering Date: Fri, 3 Aug 2018 14:46:26 +0000 (+0200) Subject: hashmap: add an explicit assert() for detecting when objects migrated between threads X-Git-Tag: v240~860^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=205c085bc36c2c61a09dc40621d8561b135d9b57;p=thirdparty%2Fsystemd.git hashmap: add an explicit assert() for detecting when objects migrated between threads When clients don't follow protocol and use the same object from different threads, then we previously would silently corrupt memory. With this assert we'll fail with an assert(). This doesn't fix anything but certainly makes mis-uses easier to detect and debug. Triggered by https://bugzilla.redhat.com/show_bug.cgi?id=1609349 --- diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c index 65e22ccd21f..44d718c83d2 100644 --- a/src/basic/hashmap.c +++ b/src/basic/hashmap.c @@ -869,9 +869,11 @@ static void hashmap_free_no_clear(HashmapBase *h) { assert_se(pthread_mutex_unlock(&hashmap_debug_list_mutex) == 0); #endif - if (h->from_pool) + if (h->from_pool) { + /* Ensure that the object didn't get migrated between threads. */ + assert_se(is_main_thread()); mempool_free_tile(hashmap_type_info[h->type].mempool, h); - else + } else free(h); }