summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-08-03 16:46:26 +0200
committerSven Eden <sven.eden@prydeworx.com>2018-10-29 10:18:30 +0100
commit173086cc5537900ea2ec72c80146eaf80458c0fc (patch)
tree42f09672488ca9f01c379e3385ae5ed7ca81ed55
parentf0d86baa42c3e699d1deeac4db9ef4dad3c4def5 (diff)
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 (cherry picked from commit 205c085bc36c2c61a09dc40621d8561b135d9b57)
-rw-r--r--src/basic/hashmap.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c
index 2ece12e6c..d89bd83c8 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);
}