mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-02-11 13:50:39 +08:00
ITS#7364 also close the mutexes as needed
Otherwise a process that opens and closes an env more than once will leak mutex handles. (WIN32/BSD)
This commit is contained in:
parent
46cf442700
commit
916995236e
@ -3154,7 +3154,16 @@ mdb_env_close(MDB_env *env)
|
||||
for (i=0; i<env->me_txns->mti_numreaders; i++)
|
||||
if (env->me_txns->mti_readers[i].mr_pid == pid)
|
||||
env->me_txns->mti_readers[i].mr_pid = 0;
|
||||
#ifdef _WIN32
|
||||
CloseHandle(env->me_rmutex);
|
||||
CloseHandle(env->me_wmutex);
|
||||
/* Windows automatically destroys the mutexes when
|
||||
* the last handle closes.
|
||||
*/
|
||||
#else
|
||||
#ifdef USE_POSIX_SEM
|
||||
sem_close(env->me_rmutex);
|
||||
sem_close(env->me_wmutex);
|
||||
{ int excl = 0;
|
||||
if (!mdb_env_excl_lock(env, &excl) && excl) {
|
||||
/* we are the only remaining user of the environment.
|
||||
@ -3163,6 +3172,7 @@ mdb_env_close(MDB_env *env)
|
||||
sem_unlink(env->me_txns->mti_wmname);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
munmap((void *)env->me_txns, (env->me_maxreaders-1)*sizeof(MDB_reader)+sizeof(MDB_txninfo));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user