fix the compilation on Windows and macOS

This commit is contained in:
Krasimir Angelov
2022-06-29 21:40:51 +02:00
parent 88477a8834
commit 46a9a8f07d

View File

@@ -388,7 +388,8 @@ PgfDB::~PgfDB()
#ifndef MREMAP_MAYMOVE #ifndef MREMAP_MAYMOVE
if (fd < 0) { if (fd < 0) {
pthread_rwlock_destroy(&ms->rwlock); pthread_rwlock_destroy(&ms->rwlock);
pthread_mutex_destroy(&ms->mutex); pthread_mutex_destroy(&ms->write_mutex);
pthread_mutex_destroy(&ms->rel_mutex);
::free(ms); ::free(ms);
::free(base); ::free(base);
} else } else
@@ -1675,19 +1676,21 @@ void PgfDB::resize_map(size_t new_size)
throw pgf_systemerror(res); throw pgf_systemerror(res);
#else #else
while(true) { while(true) {
temp = ms->rwlock; while(true) {
assert(Writer(temp)); temp = ms->rwlock;
if (WaitingCount(temp) == 0) assert(Writer(temp));
if (WaitingCount(temp) == 0)
break;
//Note: this is thread-safe (there's guaranteed not to be another EndWrite simultaneously)
//Wake all waiting readers or writers, loop until wake confirmation is received
SetEvent(hRWEvent);
}
//Decrement writer count
if (InterlockedCompareExchange(&ms->rwlock, SetWriter(temp, false), temp) == temp)
break; break;
//Note: this is thread-safe (there's guaranteed not to be another EndWrite simultaneously)
//Wake all waiting readers or writers, loop until wake confirmation is received
SetEvent(hRWEvent);
} }
//Decrement writer count
if (InterlockedCompareExchange(&ms->rwlock, SetWriter(temp, false), temp) == temp)
break;
#endif #endif
} }