mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-21 17:12:50 -06:00
fix the compilation on Windows and macOS
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user