diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c
index a120a526486d4604b96a08147cdb771605901ddc..f8211c60199dba43155e4dead2824bc866c784be 100644
--- a/libraries/libmdb/mdb.c
+++ b/libraries/libmdb/mdb.c
@@ -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));
 	}