aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2018-06-25 15:18:11 -0400
committerMike Blumenkrantz <zmike@samsung.com>2018-06-25 15:20:37 -0400
commit83bab7cab40099d0e46a78bf33dcad4c732f7ea5 (patch)
treebad040aee374cd6476a007e48a699f284dda91e1
parentelm/win: move trigger for "shot" to first pre-render callback (diff)
downloadefl-83bab7cab40099d0e46a78bf33dcad4c732f7ea5.tar.gz
eina/lock: add errno wrapping for backtrace() calls in thread debug blocks
Summary: somehow backtrace() is able to generate EINVAL in certain cases even though this is not documented anywhere. these irrelevant errors should not be noticed by users of the api during debugging, as this can cause some tests/apps to randomly fail without explanation @fix Reviewers: ManMower, devilhorns Reviewed By: ManMower Subscribers: cedric, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D6377
-rw-r--r--src/lib/eina/eina_inline_lock_posix.x6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/lib/eina/eina_inline_lock_posix.x b/src/lib/eina/eina_inline_lock_posix.x
index 625441accf..911b5c1f3b 100644
--- a/src/lib/eina/eina_inline_lock_posix.x
+++ b/src/lib/eina/eina_inline_lock_posix.x
@@ -225,7 +225,10 @@ eina_lock_take_try(Eina_Lock *mutex)
if (mutex->recursive) return ret;
mutex->locked = 1;
mutex->lock_thread_id = pthread_self();
+ /* backtrace() can somehow generate EINVAL even though this is not documented anywhere? */
+ int err = errno;
mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM);
+ errno = err;
pthread_mutex_lock(&_eina_tracking_lock);
_eina_tracking = eina_inlist_append(_eina_tracking,
@@ -295,7 +298,10 @@ eina_lock_take(Eina_Lock *mutex)
if (mutex->recursive) return ret;
mutex->locked = 1;
mutex->lock_thread_id = pthread_self();
+ /* backtrace() can somehow generate EINVAL even though this is not documented anywhere? */
+ int err = errno;
mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM);
+ errno = err;
pthread_mutex_lock(&_eina_tracking_lock);
_eina_tracking = eina_inlist_append(_eina_tracking,