diff --git a/src/callback.c b/src/callback.c index 393a558bf31b65e5de7719912b77d777fa213f16..617d11cecccf93539d22a8bc898f747720c62751 100644 --- a/src/callback.c +++ b/src/callback.c @@ -10,7 +10,7 @@ #include "pike_error.h" #include "block_alloc.h" -RCSID("$Id: callback.c,v 1.26 2002/08/15 14:49:20 marcus Exp $"); +RCSID("$Id: callback.c,v 1.27 2002/09/30 17:40:17 grubba Exp $"); struct callback_list fork_child_callback; @@ -43,11 +43,21 @@ extern int d_flag; static int is_in_free_list(struct callback * c) { - struct callback *foo; + struct callback_block *bar; int e; - for(foo=free_callbacks;foo;foo=foo->next) - if(foo==c) - return 1; + + if (!c) return 0; + + for (bar = callback_blocks; bar; bar=bar->next) { + if ((bar->x <= c) && ((c - bar->x) < CALLBACK_CHUNK)) { + struct callback *foo; + for (foo = bar->free_callbacks; foo; + foo = (void *)foo->BLOCK_ALLOC_NEXT) { + if (foo == c) return 1; + } + return 0; + } + } return 0; }