From 66bfc5ff4b291965c9f1acd24cdd735ddf843dab Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 15 Jun 2018 15:38:20 -0400 Subject: [PATCH] eina_lock: remove locks from eina tracking list on free while thread debugging Summary: this prevents invalid memory access during subsequent inlist operations @fix sq Depends on D6265 Reviewers: stefan_schmidt, ManMower, devilhorns Reviewed By: ManMower Subscribers: cedric, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D6266 --- src/lib/eina/eina_inline_lock_posix.x | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lib/eina/eina_inline_lock_posix.x b/src/lib/eina/eina_inline_lock_posix.x index 83bac7b6c5..ef14f4894e 100644 --- a/src/lib/eina/eina_inline_lock_posix.x +++ b/src/lib/eina/eina_inline_lock_posix.x @@ -179,6 +179,15 @@ eina_lock_recursive_new(Eina_Lock *mutex) static inline void eina_lock_free(Eina_Lock *mutex) { +#ifdef EINA_HAVE_DEBUG_THREADS + if (mutex->locked) + { + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_remove(_eina_tracking, + EINA_INLIST_GET(mutex)); + pthread_mutex_unlock(&_eina_tracking_lock); + } +#endif _eina_lock_free(mutex); }