Use mutex when enabling/disabling threaded-update
This commit is contained in:
parent
74341e83d4
commit
186f2edf0f
2 changed files with 25 additions and 4 deletions
|
@ -276,6 +276,8 @@ public:
|
|||
std::mutex atostrBufIndexMutex;
|
||||
std::uint32_t atostrBufIndex;
|
||||
|
||||
std::mutex setThreadedUpdateMutex;
|
||||
|
||||
}; // struct Context
|
||||
|
||||
Context *verifyContext(UDPC_HContext ctx);
|
||||
|
|
|
@ -257,7 +257,8 @@ peerPKWhitelistMutex(),
|
|||
threadedSleepTime(std::chrono::milliseconds(UDPC_UPDATE_MS_DEFAULT)),
|
||||
keysSet(),
|
||||
atostrBufIndexMutex(),
|
||||
atostrBufIndex(0)
|
||||
atostrBufIndex(0),
|
||||
setThreadedUpdateMutex()
|
||||
{
|
||||
std::memset(atostrBuf, 0, UDPC_ATOSTR_SIZE);
|
||||
|
||||
|
@ -2207,7 +2208,13 @@ UDPC_HContext UDPC_init_threaded_update_ms(
|
|||
|
||||
int UDPC_enable_threaded_update(UDPC_HContext ctx) {
|
||||
UDPC::Context *c = UDPC::verifyContext(ctx);
|
||||
if(!c || c->isAutoUpdating.load() || c->thread.joinable()) {
|
||||
if (!c) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> setThreadedLock(c->setThreadedUpdateMutex);
|
||||
|
||||
if(c->isAutoUpdating.load() || c->thread.joinable()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2222,7 +2229,13 @@ int UDPC_enable_threaded_update(UDPC_HContext ctx) {
|
|||
|
||||
int UDPC_enable_threaded_update_ms(UDPC_HContext ctx, int updateMS) {
|
||||
UDPC::Context *c = UDPC::verifyContext(ctx);
|
||||
if(!c || c->isAutoUpdating.load() || c->thread.joinable()) {
|
||||
if (!c) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> setThreadedLock(c->setThreadedUpdateMutex);
|
||||
|
||||
if(c->isAutoUpdating.load() || c->thread.joinable()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2243,7 +2256,13 @@ int UDPC_enable_threaded_update_ms(UDPC_HContext ctx, int updateMS) {
|
|||
|
||||
int UDPC_disable_threaded_update(UDPC_HContext ctx) {
|
||||
UDPC::Context *c = UDPC::verifyContext(ctx);
|
||||
if(!c || !c->isAutoUpdating.load() || !c->thread.joinable()) {
|
||||
if (!c) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> setThreadedLock(c->setThreadedUpdateMutex);
|
||||
|
||||
if(!c->isAutoUpdating.load() || !c->thread.joinable()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue