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