From c2b2448c10c18eed4f3558b74beaf64f0f0fdcb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sun, 16 Mar 2003 20:17:07 +0100 Subject: [PATCH] Added just_find_*() to PTR_HASH_ALLOC() et al. This function performs the same duty as find_*(), but doesn't alter the hash-table. Rev: src/block_alloc.h:1.65 --- src/block_alloc.h | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/block_alloc.h b/src/block_alloc.h index b2d8becff1..4d31a62fd0 100644 --- a/src/block_alloc.h +++ b/src/block_alloc.h @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: block_alloc.h,v 1.64 2003/03/15 16:18:32 grubba Exp $ +|| $Id: block_alloc.h,v 1.65 2003/03/16 19:17:07 grubba Exp $ */ #undef PRE_INIT_BLOCK @@ -398,6 +398,39 @@ struct DATA *PIKE_CONCAT(find_,DATA)(void *ptr) \ p=PIKE_CONCAT3(really_low_find_,DATA,_unlocked)(ptr, hval); \ DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ return p; \ +} \ + \ +static inline struct DATA * \ + PIKE_CONCAT3(just_find_,DATA,_unlocked)(void *ptr, \ + PIKE_HASH_T hval) \ +{ \ + struct DATA *p,**pp; \ + p=PIKE_CONCAT(DATA,_hash_table)[hval]; \ + if(!p || p->PTR_HASH_ALLOC_DATA == ptr) \ + { \ + DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ + return p; \ + } \ + while((p=p->BLOCK_ALLOC_NEXT)) \ + { \ + if(p->PTR_HASH_ALLOC_DATA==ptr) return p; \ + } \ + return 0; \ +} \ + \ +static struct DATA *PIKE_CONCAT(just_find_,DATA)(void *ptr) \ +{ \ + struct DATA *p; \ + PIKE_HASH_T hval = (PIKE_HASH_T)(((char *)ptr)-(char *)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_HASH_T)PIKE_CONCAT(DATA,_hash_table_size); \ + p=PIKE_CONCAT3(just_find_,DATA,_unlocked)(ptr, hval); \ + DO_IF_RUN_UNLOCKED(mt_unlock(&PIKE_CONCAT(DATA,_mutex))); \ + return p; \ } \ \ \ -- GitLab