replay/replay-internal.c: track holding of replay_lock
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 <alex.bennee@linaro.org> Tested-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru> Message-Id: <20180227095237.1060.44661.stgit@pasha-VirtualBox> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
80be169c1f
commit
180d30bebe
@ -169,6 +169,8 @@ void replay_finish_event(void)
|
||||
replay_fetch_data_kind();
|
||||
}
|
||||
|
||||
static __thread bool replay_locked;
|
||||
|
||||
void replay_mutex_init(void)
|
||||
{
|
||||
qemu_mutex_init(&lock);
|
||||
@ -179,13 +181,22 @@ void replay_mutex_destroy(void)
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user