summaryrefslogtreecommitdiff
path: root/src/lib/eina
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 /src/lib/eina
parent93228108efaf6097ac680664bdb9158b5cf57499 (diff)
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
Diffstat (limited to 'src/lib/eina')
-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)
225 if (mutex->recursive) return ret; 225 if (mutex->recursive) return ret;
226 mutex->locked = 1; 226 mutex->locked = 1;
227 mutex->lock_thread_id = pthread_self(); 227 mutex->lock_thread_id = pthread_self();
228 /* backtrace() can somehow generate EINVAL even though this is not documented anywhere? */
229 int err = errno;
228 mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM); 230 mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM);
231 errno = err;
229 232
230 pthread_mutex_lock(&_eina_tracking_lock); 233 pthread_mutex_lock(&_eina_tracking_lock);
231 _eina_tracking = eina_inlist_append(_eina_tracking, 234 _eina_tracking = eina_inlist_append(_eina_tracking,
@@ -295,7 +298,10 @@ eina_lock_take(Eina_Lock *mutex)
295 if (mutex->recursive) return ret; 298 if (mutex->recursive) return ret;
296 mutex->locked = 1; 299 mutex->locked = 1;
297 mutex->lock_thread_id = pthread_self(); 300 mutex->lock_thread_id = pthread_self();
301 /* backtrace() can somehow generate EINVAL even though this is not documented anywhere? */
302 int err = errno;
298 mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM); 303 mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM);
304 errno = err;
299 305
300 pthread_mutex_lock(&_eina_tracking_lock); 306 pthread_mutex_lock(&_eina_tracking_lock);
301 _eina_tracking = eina_inlist_append(_eina_tracking, 307 _eina_tracking = eina_inlist_append(_eina_tracking,