* Stefan Hajnoczi stefa...@linux.vnet.ibm.com [2011-01-05 19:54:38]:
On Tue, Jan 04, 2011 at 10:57:27AM +0530, Arun R Bharadwaj wrote:
@@ -66,15 +81,10 @@ typedef struct PosixAioState {
struct qemu_paiocb *first_aio;
} PosixAioState;
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_t thread_id;
+/* Default ThreadletQueue */
+static ThreadletQueue globalqueue;
+static int globalqueue_init;
static pthread_attr_t attr;
@@ -388,22 +375,24 @@ static void aio_thread(ThreadletWork *work)
return;
}
-static void spawn_thread(void)
+static void spawn_threadlet(ThreadletQueue *queue)
{
+pthread_t thread_id;
sigset_t set, oldset;
-cur_threads++;
-idle_threads++;
+queue-cur_threads++;
+queue-idle_threads++;
/* block all signals */
if (sigfillset(set)) die(sigfillset);
if (sigprocmask(SIG_SETMASK, set, oldset)) die(sigprocmask);
-thread_create(thread_id, attr, threadlet_worker, NULL);
+thread_create(thread_id, attr, threadlet_worker, queue);
if (sigprocmask(SIG_SETMASK, oldset, NULL)) die(sigprocmask
restore);
}
+
static void qemu_paio_submit(struct qemu_paiocb *aiocb)
{
qemu_mutex_lock(aiocb_mutex);
@@ -682,16 +685,6 @@ int paio_init(void)
qemu_aio_set_fd_handler(s-rfd, posix_aio_read, NULL, posix_aio_flush,
posix_aio_process_queue, s);
-ret = pthread_attr_init(attr);
-if (ret)
-die2(ret, pthread_attr_init);
-
-ret = pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);
-if (ret)
-die2(ret, pthread_attr_setdetachstate);
attr is no longer initialized but still used?
This initialization is still needed. Thanks for pointing this out.
This should be removed in patch 8/13 instead.
-arun
Stefan