From ec15e760066603c954c7fc5a40b61bf1cae10bf8 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 7 Oct 2018 22:04:27 +0200 Subject: [PATCH] fix ObjectStatusLocker and StateLocker to support nested calls --- src/Base/Tools.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Base/Tools.h b/src/Base/Tools.h index 35f3e1c788..a16b9ca4e7 100644 --- a/src/Base/Tools.h +++ b/src/Base/Tools.h @@ -153,14 +153,15 @@ template class ObjectStatusLocker { public: - ObjectStatusLocker(Status s, Object* o, bool st = true) : status(s), obj(o), state(st) - { obj->setStatus(status, state); } + ObjectStatusLocker(Status s, Object* o, bool v = true) : status(s), obj(o), new_value(v) + { old_value = obj->testStatus(status); obj->setStatus(status, new_value); } ~ObjectStatusLocker() - { obj->setStatus(status, !state); } + { obj->setStatus(status, old_value); } private: Status status; Object* obj; - bool state; + bool old_value; + bool new_value; }; // ---------------------------------------------------------------------------- @@ -168,13 +169,14 @@ private: class StateLocker { public: - StateLocker(bool& flag, bool st = true) : lock(flag), state(st) - { lock = state; } + StateLocker(bool& flag, bool value = true) : lock(flag), new_value(value) + { old_value = lock; lock = value; } ~StateLocker() - { lock = !state; } + { lock = old_value; } private: bool& lock; - bool state; + bool old_value; + bool new_value; }; // ----------------------------------------------------------------------------