[babl] Don't create a mutexattr for each mutex
- From: Mukund Sivaraman <muks src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] Don't create a mutexattr for each mutex
- Date: Thu, 23 Apr 2015 14:41:41 +0000 (UTC)
commit f0ae3c4c7b4b33258cb797120892646342add9b7
Author: Mukund Sivaraman <muks banu com>
Date: Wed Apr 22 13:40:06 2015 +0530
Don't create a mutexattr for each mutex
babl/babl-mutex.c | 29 +++++++++++++++++++++++------
1 files changed, 23 insertions(+), 6 deletions(-)
---
diff --git a/babl/babl-mutex.c b/babl/babl-mutex.c
index 708c54a..4fa5f29 100644
--- a/babl/babl-mutex.c
+++ b/babl/babl-mutex.c
@@ -21,6 +21,28 @@
#include <stdlib.h>
+#ifndef _WIN32
+
+static const pthread_mutexattr_t *
+get_mutex_attr (void)
+{
+ static pthread_mutexattr_t mutexattr;
+ static int initialized = 0;
+
+ if (!initialized)
+ {
+ /* On some platforms, this will keep an allocation till process
+ termination, but it isn't a growing leak. */
+ pthread_mutexattr_init (&mutexattr);
+ pthread_mutexattr_settype (&mutexattr, PTHREAD_MUTEX_RECURSIVE);
+ initialized = 1;
+ }
+
+ return &mutexattr;
+}
+
+#endif
+
BablMutex *
babl_mutex_new (void)
{
@@ -28,12 +50,7 @@ babl_mutex_new (void)
#ifdef _WIN32
InitializeCriticalSection (mutex);
#else
- pthread_mutexattr_t mutexattr;
-
- pthread_mutexattr_init (&mutexattr);
- pthread_mutexattr_settype (&mutexattr, PTHREAD_MUTEX_RECURSIVE);
- pthread_mutex_init (mutex, &mutexattr);
- pthread_mutexattr_destroy (&mutexattr);
+ pthread_mutex_init (mutex, get_mutex_attr ());
#endif
return mutex;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]