Some _aligned_malloc() doc seems to think arg NULL = user error.
Don't know if posix_memalign() pointer is defined after failure.
- 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)
+ 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) {
#ifdef HAVE_MEMALIGN
my.mc_wbuf[0] = memalign(env->me_os_psize, MDB_WBUF*2);
if (my.mc_wbuf[0] == NULL) {
- 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);
#endif
#endif
memset(my.mc_wbuf[0], 0, MDB_WBUF*2);
+ 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);
if (my.mc_cond) CloseHandle(my.mc_cond);
if (my.mc_mutex) CloseHandle(my.mc_mutex);
- _aligned_free(my.mc_wbuf[0]);
pthread_cond_destroy(&my.mc_cond);
pthread_cond_destroy(&my.mc_cond);
pthread_mutex_destroy(&my.mc_mutex);
pthread_mutex_destroy(&my.mc_mutex);
#endif
return rc ? rc : my.mc_error;
}
#endif
return rc ? rc : my.mc_error;
}