diff options
author | Derrell Lipman <derrell@dworkin.(none)> | 2009-05-13 14:31:40 -0400 |
---|---|---|
committer | Derrell Lipman <derrell@dworkin.(none)> | 2009-05-13 14:37:28 -0400 |
commit | 088906b0641e48c704c5cd529f620023616f561f (patch) | |
tree | b80f75c5ac50ace8e16032066b2bd0d61f84c107 /lib/util | |
parent | b9f3a78169be962c4f1fce625ca3a291d9f93c7c (diff) | |
download | samba-088906b0641e48c704c5cd529f620023616f561f.tar.gz samba-088906b0641e48c704c5cd529f620023616f561f.tar.bz2 samba-088906b0641e48c704c5cd529f620023616f561f.zip |
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
Diffstat (limited to 'lib/util')
-rw-r--r-- | lib/util/smb_threads.c | 6 | ||||
-rw-r--r-- | lib/util/smb_threads.h | 2 | ||||
-rw-r--r-- | lib/util/smb_threads_internal.h | 12 |
3 files changed, 12 insertions, 8 deletions
diff --git a/lib/util/smb_threads.c b/lib/util/smb_threads.c index ffe2eb0114..58ea2daa67 100644 --- a/lib/util/smb_threads.c +++ b/lib/util/smb_threads.c @@ -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'"); } diff --git a/lib/util/smb_threads.h b/lib/util/smb_threads.h index 809673ab54..9a09616774 100644 --- a/lib/util/smb_threads.h +++ b/lib/util/smb_threads.h @@ -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, diff --git a/lib/util/smb_threads_internal.h b/lib/util/smb_threads_internal.h index 038c584b60..afd7559f3b 100644 --- a/lib/util/smb_threads_internal.h +++ b/lib/util/smb_threads_internal.h @@ -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) |