[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] block: Fix race in gluster_finish_aiocb
From: |
Asias He |
Subject: |
[Qemu-devel] [PATCH] block: Fix race in gluster_finish_aiocb |
Date: |
Wed, 21 Aug 2013 10:02:47 +0800 |
In block/gluster.c, we have
gluster_finish_aiocb
{
if (retval != sizeof(acb)) {
qemu_mutex_lock_iothread(); /* We are in gluster thread context */
...
qemu_mutex_unlock_iothread();
}
}
qemu tools, e.g. qemu-img, might race here because
qemu_mutex_{lock,unlock}_iothread are a nop operation and
gluster_finish_aiocb is in the gluster thread context.
To fix, we introduce our own mutex for qemu tools.
Signed-off-by: Asias He <address@hidden>
---
stubs/iothread-lock.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/stubs/iothread-lock.c b/stubs/iothread-lock.c
index 5d8aca1..d5c6dec 100644
--- a/stubs/iothread-lock.c
+++ b/stubs/iothread-lock.c
@@ -1,10 +1,21 @@
#include "qemu-common.h"
#include "qemu/main-loop.h"
+static QemuMutex qemu_tools_mutex;
+static pthread_once_t qemu_tools_once = PTHREAD_ONCE_INIT;
+
+static void qemu_tools_mutex_init(void)
+{
+ qemu_mutex_init(&qemu_tools_mutex);
+}
+
void qemu_mutex_lock_iothread(void)
{
+ pthread_once(&qemu_tools_once, qemu_tools_mutex_init);
+ qemu_mutex_lock(&qemu_tools_mutex);
}
void qemu_mutex_unlock_iothread(void)
{
+ qemu_mutex_unlock(&qemu_tools_mutex);
}
--
1.8.3.1
- [Qemu-devel] [PATCH] block: Fix race in gluster_finish_aiocb,
Asias He <=
Re: [Qemu-devel] [PATCH] block: Fix race in gluster_finish_aiocb, Stefan Hajnoczi, 2013/08/21