summaryrefslogtreecommitdiff
path: root/libraries/liblmdb/mdb.c
diff options
context:
space:
mode:
authorHallvard Furuseth <hallvard@openldap.org>2016-06-05 23:42:44 +0200
committerHallvard Furuseth <hallvard@openldap.org>2016-06-05 23:42:44 +0200
commitc4c7833d245fdc4b2ea4a1a459d7069ce3af87f5 (patch)
tree2fca6732d5889302d4a4a50a11500dcc399e94d6 /libraries/liblmdb/mdb.c
parent53a0fdf1bee795048b3b3a40f8ffec3e3f8473a2 (diff)
downloadlmdb-c4c7833d245fdc4b2ea4a1a459d7069ce3af87f5.tar.gz
lmdb-c4c7833d245fdc4b2ea4a1a459d7069ce3af87f5.tar.bz2
lmdb-c4c7833d245fdc4b2ea4a1a459d7069ce3af87f5.zip
mdb_env_setup_locks: Plug mutexattr leak on error
Diffstat (limited to 'libraries/liblmdb/mdb.c')
-rw-r--r--libraries/liblmdb/mdb.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index 29ca141..0c9effe 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -4972,15 +4972,17 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl)
memset(env->me_txns->mti_rmutex, 0, sizeof(*env->me_txns->mti_rmutex));
memset(env->me_txns->mti_wmutex, 0, sizeof(*env->me_txns->mti_wmutex));
- if ((rc = pthread_mutexattr_init(&mattr))
- || (rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED))
+ if ((rc = pthread_mutexattr_init(&mattr)) != 0)
+ goto fail;
+ rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
#ifdef MDB_ROBUST_SUPPORTED
- || (rc = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST))
+ if (!rc) rc = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST);
#endif
- || (rc = pthread_mutex_init(env->me_txns->mti_rmutex, &mattr))
- || (rc = pthread_mutex_init(env->me_txns->mti_wmutex, &mattr)))
- goto fail;
+ if (!rc) rc = pthread_mutex_init(env->me_txns->mti_rmutex, &mattr);
+ if (!rc) rc = pthread_mutex_init(env->me_txns->mti_wmutex, &mattr);
pthread_mutexattr_destroy(&mattr);
+ if (rc)
+ goto fail;
#endif /* _WIN32 || ... */
env->me_txns->mti_magic = MDB_MAGIC;