* [Qemu-devel] [PULL v1 0/1] Merge tpm 2018/09/07 v1
@ 2018-09-07 20:45 Stefan Berger
2018-09-07 20:45 ` [Qemu-devel] [PULL v1 1/1] tests: Fix signalling race condition in TPM tests Stefan Berger
0 siblings, 1 reply; 2+ messages in thread
From: Stefan Berger @ 2018-09-07 20:45 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, marcandre.lureau, Stefan Berger
This patch fixes a TPM test failure in QEMU's test suite.
Stefan
The following changes since commit 19b599f7664b2ebfd0f405fb79c14dd241557452:
Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2018-08-27-v2' into staging (2018-08-27 16:44:20 +0100)
are available in the Git repository at:
git://github.com/stefanberger/qemu-tpm.git tags/pull-tpm-2018-09-07-1
for you to fetch changes up to 2271b75fa9019a9ba10d38ea2cf53a2032b1d8fd:
tests: Fix signalling race condition in TPM tests (2018-09-07 16:37:47 -0400)
----------------------------------------------------------------
Stefan Berger (1):
tests: Fix signalling race condition in TPM tests
tests/tpm-crb-test.c | 1 +
tests/tpm-emu.c | 11 ++++++++++-
tests/tpm-emu.h | 1 +
tests/tpm-tis-test.c | 1 +
4 files changed, 13 insertions(+), 1 deletion(-)
--
2.14.4
^ permalink raw reply [flat|nested] 2+ messages in thread
* [Qemu-devel] [PULL v1 1/1] tests: Fix signalling race condition in TPM tests
2018-09-07 20:45 [Qemu-devel] [PULL v1 0/1] Merge tpm 2018/09/07 v1 Stefan Berger
@ 2018-09-07 20:45 ` Stefan Berger
0 siblings, 0 replies; 2+ messages in thread
From: Stefan Berger @ 2018-09-07 20:45 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, marcandre.lureau, Stefan Berger
This patch fixes a race condition and test failure where the main process
waits for the signal of a thread but the thread already sent that signal
via a condition. Since these signals are non-sticky, we need to introduce a
separate variable to make this signal sticky.
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
tests/tpm-crb-test.c | 1 +
tests/tpm-emu.c | 11 ++++++++++-
tests/tpm-emu.h | 1 +
tests/tpm-tis-test.c | 1 +
4 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/tests/tpm-crb-test.c b/tests/tpm-crb-test.c
index d8f9569203..6fde579bab 100644
--- a/tests/tpm-crb-test.c
+++ b/tests/tpm-crb-test.c
@@ -151,6 +151,7 @@ int main(int argc, char **argv)
test.addr->u.q_unix.path = g_build_filename(tmp_path, "sock", NULL);
g_mutex_init(&test.data_mutex);
g_cond_init(&test.data_cond);
+ test.data_cond_signal = false;
thread = g_thread_new(NULL, tpm_emu_ctrl_thread, &test);
tpm_emu_test_wait_cond(&test);
diff --git a/tests/tpm-emu.c b/tests/tpm-emu.c
index 8c2bd53cad..125e697181 100644
--- a/tests/tpm-emu.c
+++ b/tests/tpm-emu.c
@@ -23,9 +23,14 @@ void tpm_emu_test_wait_cond(TestState *s)
gint64 end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;
g_mutex_lock(&s->data_mutex);
- if (!g_cond_wait_until(&s->data_cond, &s->data_mutex, end_time)) {
+
+ if (!s->data_cond_signal &&
+ !g_cond_wait_until(&s->data_cond, &s->data_mutex, end_time)) {
g_assert_not_reached();
}
+
+ s->data_cond_signal = false;
+
g_mutex_unlock(&s->data_mutex);
}
@@ -72,6 +77,10 @@ void *tpm_emu_ctrl_thread(void *data)
QIOChannel *ioc;
qio_channel_socket_listen_sync(lioc, s->addr, &error_abort);
+
+ g_mutex_lock(&s->data_mutex);
+ s->data_cond_signal = true;
+ g_mutex_unlock(&s->data_mutex);
g_cond_signal(&s->data_cond);
qio_channel_wait(QIO_CHANNEL(lioc), G_IO_IN);
diff --git a/tests/tpm-emu.h b/tests/tpm-emu.h
index 08f902485e..8eb802a79e 100644
--- a/tests/tpm-emu.h
+++ b/tests/tpm-emu.h
@@ -26,6 +26,7 @@ struct tpm_hdr {
typedef struct TestState {
GMutex data_mutex;
GCond data_cond;
+ bool data_cond_signal;
SocketAddress *addr;
QIOChannel *tpm_ioc;
GThread *emu_tpm_thread;
diff --git a/tests/tpm-tis-test.c b/tests/tpm-tis-test.c
index 14754d9706..c8ec14888f 100644
--- a/tests/tpm-tis-test.c
+++ b/tests/tpm-tis-test.c
@@ -446,6 +446,7 @@ int main(int argc, char **argv)
test.addr->u.q_unix.path = g_build_filename(tmp_path, "sock", NULL);
g_mutex_init(&test.data_mutex);
g_cond_init(&test.data_cond);
+ test.data_cond_signal = false;
thread = g_thread_new(NULL, tpm_emu_ctrl_thread, &test);
tpm_emu_test_wait_cond(&test);
--
2.14.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-09-07 20:45 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-07 20:45 [Qemu-devel] [PULL v1 0/1] Merge tpm 2018/09/07 v1 Stefan Berger
2018-09-07 20:45 ` [Qemu-devel] [PULL v1 1/1] tests: Fix signalling race condition in TPM tests Stefan Berger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).