@@ -401,7 +401,8 @@ void ModSettings::RejectChanges() {
401401}
402402
403403void ModSettings::NotifyListeners () {
404- std::shared_lock _ (listeners_lock);
404+ // std::shared_lock _(listeners_lock);
405+ this ->listeners_lock .LockShared ();
405406 for (auto &[id, listener] : this ->listeners ) {
406407 if (listener) {
407408 auto instance = listener.Lock ();
@@ -419,10 +420,12 @@ void ModSettings::NotifyListeners() {
419420 // remove?
420421 }
421422 }
423+ this ->listeners_lock .UnlockShared ();
422424}
423425
424426void ModSettings::NotifyListenersRequested (CName aGroupPath, CName aVarName) {
425- std::shared_lock _ (listeners_lock);
427+ // std::shared_lock _(listeners_lock);
428+ this ->listeners_lock .LockShared ();
426429 for (auto &[id, listener] : this ->listeners ) {
427430 if (listener) {
428431 auto instance = listener.Lock ();
@@ -440,10 +443,12 @@ void ModSettings::NotifyListenersRequested(CName aGroupPath, CName aVarName) {
440443 // remove?
441444 }
442445 }
446+ this ->listeners_lock .UnlockShared ();
443447}
444448
445449void ModSettings::NotifyListenersAccepted (CName aGroupPath, CName aVarName) {
446- std::shared_lock _ (listeners_lock);
450+ // std::shared_lock _(listeners_lock);
451+ this ->listeners_lock .LockShared ();
447452 for (auto &[id, listener] : this ->listeners ) {
448453 if (listener) {
449454 auto instance = listener.Lock ();
@@ -461,19 +466,24 @@ void ModSettings::NotifyListenersAccepted(CName aGroupPath, CName aVarName) {
461466 // remove?
462467 }
463468 }
469+ this ->listeners_lock .UnlockShared ();
464470}
465471
466472void ModSettings::RegisterListenerToModifications (const Handle<IScriptable> &listener) {
467473 if (listener) {
468- std::unique_lock _ (modSettings.listeners_lock );
474+ // std::unique_lock _(modSettings.listeners_lock);
475+ modSettings.listeners_lock .Lock ();
469476 modSettings.listeners [listener->unk28 ] = listener;
477+ modSettings.listeners_lock .Unlock ();
470478 }
471479}
472480
473481void ModSettings::UnregisterListenerToModifications (const Handle<IScriptable> &listener) {
474482 if (listener) {
475- std::unique_lock _ (modSettings.listeners_lock );
483+ // std::unique_lock _(modSettings.listeners_lock);
484+ modSettings.listeners_lock .Lock ();
476485 modSettings.listeners .erase (listener->unk28 );
486+ modSettings.listeners_lock .Unlock ();
477487 }
478488}
479489
0 commit comments