From 805f8131d7655bd781384b48b2c48fa1b1b3bdcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Fri, 30 Mar 2001 01:08:36 -0800 Subject: [PATCH] optimized RUN_UNLOCKED stuff a couple of percent.. Rev: src/block_alloc.h:1.29 --- src/block_alloc.h | 83 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 27 deletions(-) diff --git a/src/block_alloc.h b/src/block_alloc.h index 0d1fd31f6d..c2197ecca8 100644 --- a/src/block_alloc.h +++ b/src/block_alloc.h @@ -1,4 +1,4 @@ -/* $Id: block_alloc.h,v 1.28 2001/03/28 10:02:40 hubbe Exp $ */ +/* $Id: block_alloc.h,v 1.29 2001/03/30 09:08:36 hubbe Exp $ */ #undef PRE_INIT_BLOCK #undef INIT_BLOCK #undef EXIT_BLOCK @@ -17,7 +17,6 @@ #include "threads.h" #endif - #define BLOCK_ALLOC(DATA,BSIZE) \ \ struct PIKE_CONCAT(DATA,_block) \ @@ -30,10 +29,9 @@ static struct PIKE_CONCAT(DATA,_block) *PIKE_CONCAT(DATA,_blocks)=0; \ static struct DATA *PIKE_CONCAT3(free_,DATA,s)=(struct DATA *)-1; \ DO_IF_RUN_UNLOCKED(static PIKE_MUTEX_T PIKE_CONCAT(DATA,_mutex);) \ \ -struct DATA *PIKE_CONCAT(alloc_,DATA)(void) \ +static struct DATA *PIKE_CONCAT3(alloc_,DATA,_unlocked)(void) \ { \ struct DATA *tmp; \ - DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ if(!PIKE_CONCAT3(free_,DATA,s)) \ { \ struct PIKE_CONCAT(DATA,_block) *n; \ @@ -60,10 +58,27 @@ struct DATA *PIKE_CONCAT(alloc_,DATA)(void) \ PIKE_CONCAT3(free_,DATA,s)=(struct DATA *)tmp->BLOCK_ALLOC_NEXT; \ DO_IF_DMALLOC( dmalloc_register(tmp,sizeof(struct DATA), DMALLOC_LOCATION()); )\ INIT_BLOCK(tmp); \ - DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return tmp; \ } \ \ +struct DATA *PIKE_CONCAT(alloc_,DATA)(void) \ +{ \ + struct DATA *ret; \ + DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ + ret=PIKE_CONCAT3(alloc_,DATA,_unlocked)(); \ + DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ + return ret; \ +} \ + \ +void PIKE_CONCAT3(really_free_,DATA,_unlocked)(struct DATA *d) \ +{ \ + EXIT_BLOCK(d); \ + DO_IF_DMALLOC( dmalloc_unregister(d, 1); ) \ + d->BLOCK_ALLOC_NEXT = (void *)PIKE_CONCAT3(free_,DATA,s); \ + PRE_INIT_BLOCK(d); \ + PIKE_CONCAT3(free_,DATA,s)=d; \ +} \ + \ void PIKE_CONCAT(really_free_,DATA)(struct DATA *d) \ { \ EXIT_BLOCK(d); \ @@ -75,10 +90,9 @@ void PIKE_CONCAT(really_free_,DATA)(struct DATA *d) \ DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ } \ \ -void PIKE_CONCAT3(free_all_,DATA,_blocks)(void) \ +static void PIKE_CONCAT3(free_all_,DATA,_blocks_unlocked)(void) \ { \ struct PIKE_CONCAT(DATA,_block) *tmp; \ - DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ DO_IF_DMALLOC( \ for(tmp=PIKE_CONCAT(DATA,_blocks);tmp;tmp=tmp->next) \ { \ @@ -95,9 +109,14 @@ void PIKE_CONCAT3(free_all_,DATA,_blocks)(void) \ } \ PIKE_CONCAT(DATA,_blocks)=0; \ PIKE_CONCAT3(free_,DATA,s)=0; \ - DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ } \ \ +void PIKE_CONCAT3(free_all_,DATA,_blocks)(void) \ +{ \ + DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ + PIKE_CONCAT3(free_all_,DATA,_blocks_unlocked)(); \ + DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ +} \ \ void PIKE_CONCAT3(count_memory_in_,DATA,s)(INT32 *num_, INT32 *size_) \ { \ @@ -122,7 +141,8 @@ void PIKE_CONCAT3(count_memory_in_,DATA,s)(INT32 *num_, INT32 *size_) \ \ void PIKE_CONCAT3(init_,DATA,_blocks)(void) \ { \ - DO_IF_RUN_UNLOCKED(mt_init_recursive(&PIKE_CONCAT(DATA,_mutex))); \ +/* DO_IF_RUN_UNLOCKED(mt_init_recursive(&PIKE_CONCAT(DATA,_mutex)));*/ \ + DO_IF_RUN_UNLOCKED(mt_init(&PIKE_CONCAT(DATA,_mutex))); \ PIKE_CONCAT3(free_,DATA,s)=0; \ } \ @@ -137,10 +157,9 @@ ptrdiff_t PIKE_CONCAT(DATA,_hash_table_size)=0; \ static ptrdiff_t PIKE_CONCAT(num_,DATA)=0; \ \ inline struct DATA * \ - PIKE_CONCAT(really_low_find_,DATA)(void *ptr, ptrdiff_t hval) \ + PIKE_CONCAT3(really_low_find_,DATA,_unlocked)(void *ptr, ptrdiff_t hval) \ { \ struct DATA *p,**pp; \ - DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ p=PIKE_CONCAT(DATA,_hash_table)[hval]; \ if(!p || p->data == ptr) \ { \ @@ -154,24 +173,27 @@ inline struct DATA * \ *pp=p->BLOCK_ALLOC_NEXT; \ p->BLOCK_ALLOC_NEXT=PIKE_CONCAT(DATA,_hash_table)[hval]; \ PIKE_CONCAT(DATA,_hash_table)[hval]=p; \ - DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return p; \ } \ } \ - DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return 0; \ } \ \ - \ struct DATA *PIKE_CONCAT(find_,DATA)(void *ptr) \ { \ + struct DATA *p; \ size_t hval = (size_t)ptr; \ - if(!PIKE_CONCAT(DATA,_hash_table_size)) return 0; \ + DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ + if(!PIKE_CONCAT(DATA,_hash_table_size)) { \ + DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ + return 0; \ + } \ hval%=PIKE_CONCAT(DATA,_hash_table_size); \ - return PIKE_CONCAT(really_low_find_,DATA)(ptr, hval); \ + p=PIKE_CONCAT3(really_low_find_,DATA,_unlocked)(ptr, hval); \ + DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ + return p; \ } \ \ - \ static void PIKE_CONCAT(DATA,_rehash)() \ { \ /* Time to re-hash */ \ @@ -210,11 +232,10 @@ static void PIKE_CONCAT(DATA,_rehash)() \ } \ \ \ -struct DATA *PIKE_CONCAT(make_,DATA)(void *ptr, ptrdiff_t hval) \ +struct DATA *PIKE_CONCAT3(make_,DATA,_unlocked)(void *ptr, ptrdiff_t hval) \ { \ struct DATA *p; \ \ - DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ \ DO_IF_DEBUG( if(!PIKE_CONCAT(DATA,_hash_table)) \ fatal("Hash table error!\n"); ) \ @@ -228,10 +249,18 @@ struct DATA *PIKE_CONCAT(make_,DATA)(void *ptr, ptrdiff_t hval) \ hval%=PIKE_CONCAT(DATA,_hash_table_size); \ } \ \ - p=PIKE_CONCAT(alloc_,DATA)(); \ + p=PIKE_CONCAT3(alloc_,DATA,_unlocked)(); \ p->data=ptr; \ p->BLOCK_ALLOC_NEXT=PIKE_CONCAT(DATA,_hash_table)[hval]; \ PIKE_CONCAT(DATA,_hash_table)[hval]=p; \ + return p; \ +} \ + \ +struct DATA *PIKE_CONCAT(make_,DATA)(void *ptr, ptrdiff_t hval) \ +{ \ + struct DATA *p; \ + DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ + p=PIKE_CONCAT3(make_,DATA,_unlocked)(ptr,hval); \ DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return p; \ } \ @@ -242,8 +271,8 @@ struct DATA *PIKE_CONCAT(get_,DATA)(void *ptr) \ ptrdiff_t hval=(ptrdiff_t)ptr; \ DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ hval%=PIKE_CONCAT(DATA,_hash_table_size); \ - if(!(p=PIKE_CONCAT(really_low_find_,DATA)(ptr, hval))) \ - p=PIKE_CONCAT(make_,DATA)(ptr, hval); \ + if(!(p=PIKE_CONCAT3(really_low_find_,DATA,_unlocked)(ptr, hval))) \ + p=PIKE_CONCAT3(make_,DATA,_unlocked)(ptr, hval); \ DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return p; \ } \ @@ -254,13 +283,13 @@ int PIKE_CONCAT3(check_,DATA,_semafore)(void *ptr) \ ptrdiff_t hval=(ptrdiff_t)ptr; \ DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ hval%=PIKE_CONCAT(DATA,_hash_table_size); \ - if((p=PIKE_CONCAT(really_low_find_,DATA)(ptr, hval))) \ + if((p=PIKE_CONCAT3(really_low_find_,DATA,_unlocked)(ptr, hval))) \ { \ DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return 0; \ } \ \ - PIKE_CONCAT(make_,DATA)(ptr, hval); \ + PIKE_CONCAT3(make_,DATA,_unlocked)(ptr, hval); \ DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return 1; \ } \ @@ -276,12 +305,12 @@ int PIKE_CONCAT(remove_,DATA)(void *ptr) \ return 0; \ } \ hval%=PIKE_CONCAT(DATA,_hash_table_size); \ - if((p=PIKE_CONCAT(really_low_find_,DATA)(ptr, hval))) \ + if((p=PIKE_CONCAT3(really_low_find_,DATA,_unlocked)(ptr, hval))) \ { \ PIKE_CONCAT(num_,DATA)--; \ if(PIKE_CONCAT(DATA,_hash_table)[hval]!=p) fatal("GAOssdf\n"); \ PIKE_CONCAT(DATA,_hash_table)[hval]=p->BLOCK_ALLOC_NEXT; \ - PIKE_CONCAT(really_free_,DATA)(p); \ + PIKE_CONCAT3(really_free_,DATA,_unlocked)(p); \ DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return 1; \ } \ @@ -312,7 +341,7 @@ void PIKE_CONCAT3(init_,DATA,_hash)(void) \ void PIKE_CONCAT3(exit_,DATA,_hash)(void) \ { \ DO_IF_RUN_UNLOCKED(mt_lock(&PIKE_CONCAT(DATA,_mutex))); \ - PIKE_CONCAT3(free_all_,DATA,_blocks)(); \ + PIKE_CONCAT3(free_all_,DATA,_blocks_unlocked)(); \ free(PIKE_CONCAT(DATA,_hash_table)); \ PIKE_CONCAT(DATA,_hash_table)=0; \ PIKE_CONCAT(num_,DATA)=0; \ -- GitLab