X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fasio.c;h=f8249515eb82c9f4cdc616396762eaeb83b4fffd;hb=a056be596636dc32da7efba66d841f31921da76f;hp=1102352ef3c05e9fe87de30faacfdde8d6b7027a;hpb=b7b9a3d3d56430caba2f41a2e9cae8ca87dce1d6;p=libucw.git diff --git a/lib/asio.c b/lib/asio.c index 1102352e..f8249515 100644 --- a/lib/asio.c +++ b/lib/asio.c @@ -11,6 +11,7 @@ #include "lib/lib.h" #include "lib/asio.h" +#include "lib/threads.h" #include #include @@ -20,19 +21,18 @@ static uns asio_num_users; static struct worker_pool asio_wpool; static void -asio_init(void) +asio_init_unlocked(void) { if (asio_num_users++) return; DBG("ASIO: INIT"); asio_wpool.num_threads = 1; - asio_wpool.stack_size = 65536; worker_pool_init(&asio_wpool); } static void -asio_cleanup(void) +asio_cleanup_unlocked(void) { if (--asio_num_users) return; @@ -44,13 +44,16 @@ asio_cleanup(void) void asio_init_queue(struct asio_queue *q) { - asio_init(); + ucwlib_lock(); + asio_init_unlocked(); + ucwlib_unlock(); DBG("ASIO: New queue %p", q); ASSERT(q->buffer_size); q->allocated_requests = 0; q->running_requests = 0; q->running_writebacks = 0; + q->use_count = 0; clist_init(&q->idle_list); clist_init(&q->done_list); work_queue_init(&asio_wpool, &q->queue); @@ -74,7 +77,10 @@ asio_cleanup_queue(struct asio_queue *q) } work_queue_cleanup(&q->queue); - asio_cleanup(); + + ucwlib_lock(); + asio_cleanup_unlocked(); + ucwlib_unlock(); } struct asio_request * @@ -170,7 +176,7 @@ asio_submit(struct asio_request *r) q->running_requests++; r->submitted = 1; r->work.go = asio_handler; - r->work.returned = NULL; + r->work.priority = 0; work_submit(&q->queue, &r->work); }