summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/util/smb_threads.c6
-rw-r--r--lib/util/smb_threads.h2
-rw-r--r--lib/util/smb_threads_internal.h12
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)