test: fix bufferevent/bufferevent_pair_release_lock in debug mode

After this test had been fixed for freebsd the debug build was broken because
we can't call evthread_set_lock_callbacks() when something already initialized,
and we can't call event_base_free() (in kqueue case) when it is initialized,
because of "held_by", but this only playing role during freeing lock profiler
so reset lock callbacks there before and this will fix both.

Fixes: 79f9ace4ae8a259a5cf1b4ff3869078b60ff16a1 ("test: fix
bufferevent/bufferevent_pair_release_lock for freebsd")

P.S. after this patch 'make verify' finishes without errors on freebsd.
This commit is contained in:
Azat Khuzhin 2015-09-10 13:38:58 +03:00
parent 79f9ace4ae
commit 3f749e93db

View File

@ -276,14 +276,13 @@ static int trace_lock_unlock(unsigned mode, void *lock_)
} }
static void lock_unlock_free_thread_cbs(void) static void lock_unlock_free_thread_cbs(void)
{ {
/** drop immutable flag */
evthread_set_lock_callbacks(NULL);
event_base_free(NULL); event_base_free(NULL);
if (libevent_tests_running_in_debug_mode) if (libevent_tests_running_in_debug_mode)
libevent_global_shutdown(); libevent_global_shutdown();
/** drop immutable flag */
evthread_set_lock_callbacks(NULL);
/** avoid calling of event_global_setup_locks_() for new cbs */ /** avoid calling of event_global_setup_locks_() for new cbs */
libevent_global_shutdown(); libevent_global_shutdown();
/** drop immutable flag for non-debug ops (since called after shutdown) */ /** drop immutable flag for non-debug ops (since called after shutdown) */
@ -315,6 +314,9 @@ static int use_lock_unlock_profiler(void)
} }
static void free_lock_unlock_profiler(struct basic_test_data *data) static void free_lock_unlock_profiler(struct basic_test_data *data)
{ {
/** fix "held_by" for kqueue */
evthread_set_lock_callbacks(NULL);
lock_unlock_free_thread_cbs(); lock_unlock_free_thread_cbs();
free(lu_base.locks); free(lu_base.locks);
data->base = NULL; data->base = NULL;