mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
Make the thread functions a bit easier to use
- Create separate macros for lock and unlock so that it's easier to identify which request is being made. - Initialize *ponce in the SMB_THREAD_ONCE macro in the non-thread-safe case, rather than requiring each init function to determine if it's in the non-thread-safe case and manually initialize. Derrell
This commit is contained in:
parent
b9f3a78169
commit
088906b064
@ -43,7 +43,7 @@ void **global_lock_array;
|
||||
Mutex used for our internal "once" function
|
||||
*********************************************************/
|
||||
|
||||
void *once_mutex = NULL;
|
||||
static void *once_mutex = NULL;
|
||||
|
||||
|
||||
/*********************************************************
|
||||
@ -112,7 +112,7 @@ int smb_thread_once(smb_thread_once_t *ponce,
|
||||
int ret;
|
||||
|
||||
/* Lock our "once" mutex in order to test and initialize ponce */
|
||||
if (SMB_THREAD_LOCK(once_mutex, SMB_THREAD_LOCK) != 0) {
|
||||
if (SMB_THREAD_LOCK(once_mutex) != 0) {
|
||||
smb_panic("error locking 'once'");
|
||||
}
|
||||
|
||||
@ -132,7 +132,7 @@ int smb_thread_once(smb_thread_once_t *ponce,
|
||||
}
|
||||
|
||||
/* Unlock the mutex */
|
||||
if (SMB_THREAD_LOCK(once_mutex, SMB_THREAD_UNLOCK) != 0) {
|
||||
if (SMB_THREAD_UNLOCK(once_mutex) != 0) {
|
||||
smb_panic("error unlocking 'once'");
|
||||
}
|
||||
|
||||
|
@ -22,8 +22,6 @@
|
||||
|
||||
typedef bool smb_thread_once_t;
|
||||
#define SMB_THREAD_ONCE_INIT false
|
||||
#define SMB_THREAD_ONCE_IS_INITIALIZED(val) ((val) == true)
|
||||
#define SMB_THREAD_ONCE_INITIALIZE(val) ((val) = true)
|
||||
|
||||
enum smb_thread_lock_type {
|
||||
SMB_THREAD_LOCK = 1,
|
||||
|
@ -30,15 +30,21 @@
|
||||
}; \
|
||||
} while (0)
|
||||
|
||||
#define SMB_THREAD_LOCK(plock, type) \
|
||||
(global_tfp ? global_tfp->lock_mutex((plock), (type), __location__) : 0)
|
||||
#define SMB_THREAD_LOCK_INTERNAL(plock, type, location) \
|
||||
(global_tfp ? global_tfp->lock_mutex((plock), (type), location) : 0)
|
||||
|
||||
#define SMB_THREAD_LOCK(plock) \
|
||||
SMB_THREAD_LOCK_INTERNAL(plock, SMB_THREAD_LOCK, __location__)
|
||||
|
||||
#define SMB_THREAD_UNLOCK(plock) \
|
||||
SMB_THREAD_LOCK_INTERNAL(plock, SMB_THREAD_UNLOCK, __location__)
|
||||
|
||||
#define SMB_THREAD_ONCE(ponce, init_fn, pdata) \
|
||||
(global_tfp \
|
||||
? (! *(ponce) \
|
||||
? smb_thread_once((ponce), (init_fn), (pdata)) \
|
||||
: 0) \
|
||||
: ((init_fn(pdata)), 0))
|
||||
: ((init_fn(pdata)), *(ponce) = true, 1))
|
||||
|
||||
#define SMB_THREAD_CREATE_TLS(keyname, key) \
|
||||
(global_tfp ? global_tfp->create_tls((keyname), &(key), __location__) : 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user