summaryrefslogtreecommitdiffstats
path: root/include/c11
diff options
context:
space:
mode:
authorEmil Velikov <[email protected]>2016-04-24 16:14:04 +0100
committerEmil Velikov <[email protected]>2016-05-23 12:07:45 +0100
commit6ce11e7e2c6be033e0d712fc39359de7b955c2bf (patch)
tree8cd3b4f1488a6f9f80fc74e37f0f7d798ddbb56e /include/c11
parent4424bf5da4f9cd18bb30fc14d1d8403e4ec6caff (diff)
c11/threads: create mutexattrs only when needed
If the mutexattrs are the default one can just pass NULL to pthread_mutex_init. As the compiler does not know this detail it unnecessarily creates/destroys the attrs. Signed-off-by: Emil Velikov <[email protected]>
Diffstat (limited to 'include/c11')
-rw-r--r--include/c11/threads_posix.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/include/c11/threads_posix.h b/include/c11/threads_posix.h
index ce9853b18b3..11d36e46239 100644
--- a/include/c11/threads_posix.h
+++ b/include/c11/threads_posix.h
@@ -180,9 +180,14 @@ mtx_init(mtx_t *mtx, int type)
&& type != (mtx_timed|mtx_recursive)
&& type != (mtx_try|mtx_recursive))
return thrd_error;
+
+ if ((type & mtx_recursive) == 0) {
+ pthread_mutex_init(mtx, NULL);
+ return thrd_success;
+ }
+
pthread_mutexattr_init(&attr);
- if ((type & mtx_recursive) != 0)
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(mtx, &attr);
pthread_mutexattr_destroy(&attr);
return thrd_success;