diff options
author | Hallvard Furuseth <hallvard@openldap.org> | 2016-06-05 23:42:44 +0200 |
---|---|---|
committer | Hallvard Furuseth <hallvard@openldap.org> | 2016-06-05 23:42:44 +0200 |
commit | c4c7833d245fdc4b2ea4a1a459d7069ce3af87f5 (patch) | |
tree | 2fca6732d5889302d4a4a50a11500dcc399e94d6 /libraries/liblmdb/mdb.c | |
parent | 53a0fdf1bee795048b3b3a40f8ffec3e3f8473a2 (diff) | |
download | lmdb-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.c | 14 |
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; |