diff --git a/src/block_alloc.h b/src/block_alloc.h index c2b203afd0fb2ef7e78210aab18dd8790a776ed6..066327472bdb95e3694340caa1995af80be4817a 100644 --- a/src/block_alloc.h +++ b/src/block_alloc.h @@ -1,4 +1,4 @@ -/* $Id: block_alloc.h,v 1.8 1999/04/02 19:38:35 hubbe Exp $ */ +/* $Id: block_alloc.h,v 1.9 1999/04/02 20:53:12 hubbe Exp $ */ #undef PRE_INIT_BLOCK #undef INIT_BLOCK #undef EXIT_BLOCK @@ -109,7 +109,7 @@ struct DATA *PIKE_CONCAT(find_,DATA)(void *ptr) \ \ \ \ -inline struct DATA *PIKE_CONCAT(make_,DATA)(void *ptr, int hval) \ +struct DATA *PIKE_CONCAT(make_,DATA)(void *ptr, int hval) \ { \ struct DATA *p; \ \ @@ -119,8 +119,7 @@ inline struct DATA *PIKE_CONCAT(make_,DATA)(void *ptr, int hval) \ PIKE_CONCAT(DATA,_hash_table_size)) \ { \ /* Time to re-hash */ \ - struct DATA **PIKE_CONCAT(DATA,_hash_table_old)= \ - PIKE_CONCAT(DATA,_hash_table); \ + struct DATA **old_hash= PIKE_CONCAT(DATA,_hash_table); \ int e=PIKE_CONCAT(DATA,_hash_table_size); \ \ PIKE_CONCAT(DATA,_hash_table_size)*=2; \ @@ -133,9 +132,9 @@ inline struct DATA *PIKE_CONCAT(make_,DATA)(void *ptr, int hval) \ sizeof(struct DATA *)*PIKE_CONCAT(DATA,_hash_table_size)); \ while(e-- >=0) \ { \ - while((p=PIKE_CONCAT(DATA,_hash_table_old)[e])) \ + while((p=old_hash[e])) \ { \ - PIKE_CONCAT(DATA,_hash_table_old)[e]=p->next; \ + old_hash[e]=p->next; \ hval=(long)(p-> data); \ hval%=PIKE_CONCAT(DATA,_hash_table_size); \ p->next=PIKE_CONCAT(DATA,_hash_table)[hval]; \ @@ -144,13 +143,15 @@ inline struct DATA *PIKE_CONCAT(make_,DATA)(void *ptr, int hval) \ } \ hval=(long)ptr; \ hval%=PIKE_CONCAT(DATA,_hash_table_size); \ + free((char *)old_hash);\ }else{ \ - PIKE_CONCAT(DATA,_hash_table)=PIKE_CONCAT(DATA,_hash_table_old); \ + PIKE_CONCAT(DATA,_hash_table)=old_hash; \ PIKE_CONCAT(DATA,_hash_table_size)=e; \ } \ } \ \ p=PIKE_CONCAT(alloc_,DATA)(); \ + p->data=ptr; \ p->next=PIKE_CONCAT(DATA,_hash_table)[hval]; \ PIKE_CONCAT(DATA,_hash_table)[hval]=p; \ return p; \ @@ -187,8 +188,9 @@ int PIKE_CONCAT(remove_,DATA)(void *ptr) \ if((p=PIKE_CONCAT(really_low_find_,DATA)(ptr, hval))) \ { \ PIKE_CONCAT(num_,DATA)--; \ + if(PIKE_CONCAT(DATA,_hash_table)[hval]!=p) fatal("GAOssdf\n"); \ PIKE_CONCAT(DATA,_hash_table)[hval]=p->next; \ - PIKE_CONCAT(really_free_,DATA)(p); \ + PIKE_CONCAT(really_free_,DATA)(p); \ return 1; \ } \ return 0; \