From 291c69ddbd593ce86c888718745f6d78f6bd7222 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Wed, 29 Jun 2016 06:25:37 +0200 Subject: [PATCH] ITS#8209 Tweak previous fixes Some _aligned_malloc() doc seems to think arg NULL = user error. Don't know if posix_memalign() pointer is defined after failure. --- libraries/liblmdb/mdb.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 4ea4204..3777ab3 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -9922,9 +9922,10 @@ mdb_env_copyfd1(MDB_env *env, HANDLE fd) goto done; } #else - if ((rc = pthread_mutex_init(&my.mc_mutex, NULL)) || - (rc = pthread_cond_init(&my.mc_cond, NULL))) + if ((rc = pthread_mutex_init(&my.mc_mutex, NULL)) != 0) return rc; + if ((rc = pthread_cond_init(&my.mc_cond, NULL)) != 0) + goto done2; #ifdef HAVE_MEMALIGN my.mc_wbuf[0] = memalign(env->me_os_psize, MDB_WBUF*2); if (my.mc_wbuf[0] == NULL) { @@ -9932,9 +9933,12 @@ mdb_env_copyfd1(MDB_env *env, HANDLE fd) goto done; } #else - rc = posix_memalign((void **)&my.mc_wbuf[0], env->me_os_psize, MDB_WBUF*2); - if (rc) - goto done; + { + void *p; + if ((rc = posix_memalign(&p, env->me_os_psize, MDB_WBUF*2)) != 0) + goto done; + my.mc_wbuf[0] = p; + } #endif #endif memset(my.mc_wbuf[0], 0, MDB_WBUF*2); @@ -10012,13 +10016,14 @@ finish: done: #ifdef _WIN32 + if (my.mc_wbuf[0]) _aligned_free(my.mc_wbuf[0]); if (my.mc_cond) CloseHandle(my.mc_cond); if (my.mc_mutex) CloseHandle(my.mc_mutex); - _aligned_free(my.mc_wbuf[0]); #else + free(my.mc_wbuf[0]); pthread_cond_destroy(&my.mc_cond); +done2: pthread_mutex_destroy(&my.mc_mutex); - free(my.mc_wbuf[0]); #endif return rc ? rc : my.mc_error; } -- 2.7.4