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.
ntdll
Hallvard Furuseth 9 years ago
parent 5ea12b0be8
commit 291c69ddbd
  1. 17
      libraries/liblmdb/mdb.c

@ -9922,9 +9922,10 @@ mdb_env_copyfd1(MDB_env *env, HANDLE fd)
goto done; goto done;
} }
#else #else
if ((rc = pthread_mutex_init(&my.mc_mutex, NULL)) || if ((rc = pthread_mutex_init(&my.mc_mutex, NULL)) != 0)
(rc = pthread_cond_init(&my.mc_cond, NULL)))
return rc; return rc;
if ((rc = pthread_cond_init(&my.mc_cond, NULL)) != 0)
goto done2;
#ifdef HAVE_MEMALIGN #ifdef HAVE_MEMALIGN
my.mc_wbuf[0] = memalign(env->me_os_psize, MDB_WBUF*2); my.mc_wbuf[0] = memalign(env->me_os_psize, MDB_WBUF*2);
if (my.mc_wbuf[0] == NULL) { if (my.mc_wbuf[0] == NULL) {
@ -9932,9 +9933,12 @@ mdb_env_copyfd1(MDB_env *env, HANDLE fd)
goto done; goto done;
} }
#else #else
rc = posix_memalign((void **)&my.mc_wbuf[0], env->me_os_psize, MDB_WBUF*2); {
if (rc) void *p;
if ((rc = posix_memalign(&p, env->me_os_psize, MDB_WBUF*2)) != 0)
goto done; goto done;
my.mc_wbuf[0] = p;
}
#endif #endif
#endif #endif
memset(my.mc_wbuf[0], 0, MDB_WBUF*2); memset(my.mc_wbuf[0], 0, MDB_WBUF*2);
@ -10012,13 +10016,14 @@ finish:
done: done:
#ifdef _WIN32 #ifdef _WIN32
if (my.mc_wbuf[0]) _aligned_free(my.mc_wbuf[0]);
if (my.mc_cond) CloseHandle(my.mc_cond); if (my.mc_cond) CloseHandle(my.mc_cond);
if (my.mc_mutex) CloseHandle(my.mc_mutex); if (my.mc_mutex) CloseHandle(my.mc_mutex);
_aligned_free(my.mc_wbuf[0]);
#else #else
free(my.mc_wbuf[0]);
pthread_cond_destroy(&my.mc_cond); pthread_cond_destroy(&my.mc_cond);
done2:
pthread_mutex_destroy(&my.mc_mutex); pthread_mutex_destroy(&my.mc_mutex);
free(my.mc_wbuf[0]);
#endif #endif
return rc ? rc : my.mc_error; return rc ? rc : my.mc_error;
} }

Loading…
Cancel
Save