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? Stefan