mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 14:07:59 +00:00
Merge branch '3534-fix-error-reporting-for-posix-threads-functions' into 'main'
Fix error reporting for POSIX Threads functions See merge request isc-projects/bind9!6756
This commit is contained in:
@@ -60,34 +60,34 @@ typedef pthread_cond_t isc_condition_t;
|
|||||||
|
|
||||||
#endif /* ISC_TRACK_PTHREADS_OBJECTS */
|
#endif /* ISC_TRACK_PTHREADS_OBJECTS */
|
||||||
|
|
||||||
#define isc__condition_init(cond) \
|
#define isc__condition_init(cond) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_cond_init(cond, NULL); \
|
int _ret = pthread_cond_init(cond, NULL); \
|
||||||
ERRNO_CHECK(pthread_cond_init, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_cond_init, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__condition_wait(cp, mp) \
|
#define isc__condition_wait(cp, mp) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_cond_wait(cp, mp); \
|
int _ret = pthread_cond_wait(cp, mp); \
|
||||||
ERRNO_CHECK(pthread_cond_wait, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_cond_wait, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__condition_signal(cp) \
|
#define isc__condition_signal(cp) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_cond_signal(cp); \
|
int _ret = pthread_cond_signal(cp); \
|
||||||
ERRNO_CHECK(pthread_cond_signal, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_cond_signal, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__condition_broadcast(cp) \
|
#define isc__condition_broadcast(cp) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_cond_broadcast(cp); \
|
int _ret = pthread_cond_broadcast(cp); \
|
||||||
ERRNO_CHECK(pthread_cond_broadcast, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_cond_broadcast, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__condition_destroy(cp) \
|
#define isc__condition_destroy(cp) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_cond_destroy(cp); \
|
int _ret = pthread_cond_destroy(cp); \
|
||||||
ERRNO_CHECK(pthread_cond_destroy, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_cond_destroy, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
|
@@ -60,28 +60,28 @@ extern pthread_mutexattr_t isc__mutex_init_attr;
|
|||||||
#define isc__mutex_init(mp) \
|
#define isc__mutex_init(mp) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_mutex_init(mp, &isc__mutex_init_attr); \
|
int _ret = pthread_mutex_init(mp, &isc__mutex_init_attr); \
|
||||||
ERRNO_CHECK(pthread_mutex_init, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_mutex_init, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__mutex_lock(mp) \
|
#define isc__mutex_lock(mp) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_mutex_lock(mp); \
|
int _ret = pthread_mutex_lock(mp); \
|
||||||
ERRNO_CHECK(pthread_mutex_lock, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_mutex_lock, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__mutex_unlock(mp) \
|
#define isc__mutex_unlock(mp) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_mutex_unlock(mp); \
|
int _ret = pthread_mutex_unlock(mp); \
|
||||||
ERRNO_CHECK(pthread_mutex_unlock, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_mutex_unlock, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__mutex_trylock(mp) \
|
#define isc__mutex_trylock(mp) \
|
||||||
((pthread_mutex_trylock(mp) == 0) ? ISC_R_SUCCESS : ISC_R_LOCKBUSY)
|
((pthread_mutex_trylock(mp) == 0) ? ISC_R_SUCCESS : ISC_R_LOCKBUSY)
|
||||||
|
|
||||||
#define isc__mutex_destroy(mp) \
|
#define isc__mutex_destroy(mp) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = pthread_mutex_destroy(mp); \
|
int _ret = pthread_mutex_destroy(mp); \
|
||||||
ERRNO_CHECK(pthread_mutex_destroy, _ret); \
|
PTHREADS_RUNTIME_CHECK(pthread_mutex_destroy, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
ISC_LANG_ENDDECLS
|
ISC_LANG_ENDDECLS
|
||||||
|
@@ -127,34 +127,34 @@ typedef struct isc_rwlock isc__rwlock_t;
|
|||||||
|
|
||||||
#endif /* USE_PTHREAD_RWLOCK */
|
#endif /* USE_PTHREAD_RWLOCK */
|
||||||
|
|
||||||
#define isc__rwlock_init(rwl, rq, wq) \
|
#define isc__rwlock_init(rwl, rq, wq) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = isc___rwlock_init(rwl, rq, wq); \
|
int _ret = isc___rwlock_init(rwl, rq, wq); \
|
||||||
ERRNO_CHECK(isc___rwlock_init, _ret); \
|
PTHREADS_RUNTIME_CHECK(isc___rwlock_init, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__rwlock_lock(rwl, type) \
|
#define isc__rwlock_lock(rwl, type) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = isc___rwlock_lock(rwl, type); \
|
int _ret = isc___rwlock_lock(rwl, type); \
|
||||||
ERRNO_CHECK(isc___rwlock_lock, _ret); \
|
PTHREADS_RUNTIME_CHECK(isc___rwlock_lock, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__rwlock_unlock(rwl, type) \
|
#define isc__rwlock_unlock(rwl, type) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = isc___rwlock_unlock(rwl, type); \
|
int _ret = isc___rwlock_unlock(rwl, type); \
|
||||||
ERRNO_CHECK(isc___rwlock_unlock, _ret); \
|
PTHREADS_RUNTIME_CHECK(isc___rwlock_unlock, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__rwlock_downgrade(rwl) \
|
#define isc__rwlock_downgrade(rwl) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = isc___rwlock_downgrade(rwl); \
|
int _ret = isc___rwlock_downgrade(rwl); \
|
||||||
ERRNO_CHECK(isc___rwlock_downgrade, _ret); \
|
PTHREADS_RUNTIME_CHECK(isc___rwlock_downgrade, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define isc__rwlock_destroy(rwl) \
|
#define isc__rwlock_destroy(rwl) \
|
||||||
{ \
|
{ \
|
||||||
int _ret = isc___rwlock_destroy(rwl); \
|
int _ret = isc___rwlock_destroy(rwl); \
|
||||||
ERRNO_CHECK(isc___rwlock_destroy, _ret); \
|
PTHREADS_RUNTIME_CHECK(isc___rwlock_destroy, _ret); \
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@@ -334,13 +334,17 @@ mock_assert(const int result, const char *const expression,
|
|||||||
|
|
||||||
#endif /* UNIT_TESTING */
|
#endif /* UNIT_TESTING */
|
||||||
|
|
||||||
/*% Runtime check which logs the error string corresponding to errno */
|
/*%
|
||||||
#define ERRNO_CHECK(func, ret) \
|
* Runtime check which logs the error value returned by a POSIX Threads
|
||||||
if ((ret) != 0) { \
|
* function and the error string that corresponds to it
|
||||||
char _strerrorbuf[ISC_STRERRORSIZE]; \
|
*/
|
||||||
strerror_r(errno, _strerrorbuf, sizeof(_strerrorbuf)); \
|
#define PTHREADS_RUNTIME_CHECK(func, ret) \
|
||||||
isc_error_fatal(__FILE__, __LINE__, "%s() failed in %s(): %s", \
|
if ((ret) != 0) { \
|
||||||
#func, __func__, _strerrorbuf); \
|
char _strerrorbuf[ISC_STRERRORSIZE]; \
|
||||||
|
strerror_r(ret, _strerrorbuf, sizeof(_strerrorbuf)); \
|
||||||
|
isc_error_fatal(__FILE__, __LINE__, \
|
||||||
|
"%s(): %s() failed with error %d (%s)", \
|
||||||
|
__func__, #func, ret, _strerrorbuf); \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*%
|
/*%
|
||||||
|
@@ -58,18 +58,18 @@ isc_thread_create(isc_threadfunc_t func, isc_threadarg_t arg,
|
|||||||
#if defined(HAVE_PTHREAD_ATTR_GETSTACKSIZE) && \
|
#if defined(HAVE_PTHREAD_ATTR_GETSTACKSIZE) && \
|
||||||
defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE)
|
defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE)
|
||||||
ret = pthread_attr_getstacksize(&attr, &stacksize);
|
ret = pthread_attr_getstacksize(&attr, &stacksize);
|
||||||
ERRNO_CHECK(pthread_attr_getstacksize, ret);
|
PTHREADS_RUNTIME_CHECK(pthread_attr_getstacksize, ret);
|
||||||
|
|
||||||
if (stacksize < THREAD_MINSTACKSIZE) {
|
if (stacksize < THREAD_MINSTACKSIZE) {
|
||||||
ret = pthread_attr_setstacksize(&attr, THREAD_MINSTACKSIZE);
|
ret = pthread_attr_setstacksize(&attr, THREAD_MINSTACKSIZE);
|
||||||
ERRNO_CHECK(pthread_attr_setstacksize, ret);
|
PTHREADS_RUNTIME_CHECK(pthread_attr_setstacksize, ret);
|
||||||
}
|
}
|
||||||
#endif /* if defined(HAVE_PTHREAD_ATTR_GETSTACKSIZE) && \
|
#endif /* if defined(HAVE_PTHREAD_ATTR_GETSTACKSIZE) && \
|
||||||
* defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) */
|
* defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) */
|
||||||
|
|
||||||
ret = pthread_create(thread, &attr, isc__trampoline_run,
|
ret = pthread_create(thread, &attr, isc__trampoline_run,
|
||||||
trampoline_arg);
|
trampoline_arg);
|
||||||
ERRNO_CHECK(pthread_create, ret);
|
PTHREADS_RUNTIME_CHECK(pthread_create, ret);
|
||||||
|
|
||||||
pthread_attr_destroy(&attr);
|
pthread_attr_destroy(&attr);
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ void
|
|||||||
isc_thread_join(isc_thread_t thread, isc_threadresult_t *result) {
|
isc_thread_join(isc_thread_t thread, isc_threadresult_t *result) {
|
||||||
int ret = pthread_join(thread, result);
|
int ret = pthread_join(thread, result);
|
||||||
|
|
||||||
ERRNO_CHECK(pthread_join, ret);
|
PTHREADS_RUNTIME_CHECK(pthread_join, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Reference in New Issue
Block a user