From 93913da1c4a528e0a832dc8dc163fa30f3e580d4 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Mon, 12 Feb 2018 19:43:13 +0300 Subject: [PATCH] buffer: fix incorrect unlock of the buffer mutex (for deferred callbacks) TSAN reports: WARNING: ThreadSanitizer: unlock of an unlocked mutex (or by a wrong thread) (pid=17111) #0 pthread_mutex_unlock /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:3621 (libtsan.so.0+0x00000003b71c) #1 evbuffer_add (libevent_core-2.2.so.1+0x00000000ddb6) ... Mutex M392 (0x7b0c00000f00) created at: #0 pthread_mutex_init /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors.cc:1117 (libtsan.so.0+0x0000000291af) #1 (libevent_pthreads-2.2.so.1+0x000000000d46) ... $ addr2line -e /lib/libevent_core-2.2.so.1 0x00000000ddb6 /src/libevent/buffer.c:1815 (discriminator 1) Introduced-in: ae2b84b2575be93d0aebba5c0b78453836f89f3c ("Replace deferred_cbs with event_callback-based implementation.") --- buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buffer.c b/buffer.c index 9a7b2a6a..8113ce6c 100644 --- a/buffer.c +++ b/buffer.c @@ -522,8 +522,8 @@ evbuffer_invoke_callbacks_(struct evbuffer *buffer) evbuffer_incref_and_lock_(buffer); if (buffer->parent) bufferevent_incref_(buffer->parent); + EVBUFFER_UNLOCK(buffer); } - EVBUFFER_UNLOCK(buffer); } evbuffer_run_callbacks(buffer, 0); -- 2.40.0