This is modelled after the iothread mutex lock. We keep a TLS flag to
indicate when that thread has acquired the lock and assert we don't
double-lock or release when we shouldn't have.
Signed-off-by: Alex Bennée <[email protected]>
Tested-by: Pavel Dovgalyuk <[email protected]>
Message-Id: <
20180227095237.1060.44661.stgit@pasha-VirtualBox>
Signed-off-by: Paolo Bonzini <[email protected]>
replay_fetch_data_kind();
}
+static __thread bool replay_locked;
+
void replay_mutex_init(void)
{
qemu_mutex_init(&lock);
qemu_mutex_destroy(&lock);
}
+static bool replay_mutex_locked(void)
+{
+ return replay_locked;
+}
+
void replay_mutex_lock(void)
{
+ g_assert(!replay_mutex_locked());
qemu_mutex_lock(&lock);
+ replay_locked = true;
}
void replay_mutex_unlock(void)
{
+ g_assert(replay_mutex_locked());
+ replay_locked = false;
qemu_mutex_unlock(&lock);
}