X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=smalloc.c;h=7f3c10b137498d01f812e4807298b2f2b06e6870;hp=1c975df47ae3f6a6fcf6088ed1bc25e679e9eb2b;hb=d1271dc19c335c39298e16b825f84fdd8650132e;hpb=2b52511f3f595e0932e7f9c55bed243e8fe0f4f8;ds=sidebyside diff --git a/smalloc.c b/smalloc.c index 1c975df4..7f3c10b1 100644 --- a/smalloc.c +++ b/smalloc.c @@ -226,9 +226,7 @@ static int add_pool(struct pool *pool, unsigned int alloc_size) pool->fd = fd; - global_write_lock(); nr_pools++; - global_write_unlock(); return 0; out_unlink: fprintf(stderr, "smalloc: failed adding pool\n"); @@ -442,7 +440,7 @@ void *smalloc(unsigned int size) { unsigned int i; - global_read_lock(); + global_write_lock(); i = last_pool; do { @@ -451,7 +449,7 @@ void *smalloc(unsigned int size) if (ptr) { last_pool = i; - global_read_unlock(); + global_write_unlock(); return ptr; } } @@ -464,15 +462,13 @@ void *smalloc(unsigned int size) break; else { i = nr_pools; - global_read_unlock(); if (add_pool(&mp[nr_pools], size)) goto out; - global_read_lock(); } } while (1); - global_read_unlock(); out: + global_write_unlock(); return NULL; }