rem: unlock(&locks[TIMER_LOCK]);
add: lock_release(timer_lock);
context: int pike_check_req(struct sip_msg *msg, char *foo, char *bar){	struct ip_node *node;	struct ip_node *father;	char   flag;	int    ret;	lock( &locks[TREE_LOCK] );	node = add_node( tree, msg->rcv.src_ip.u.addr,			 msg->rcv.src_ip.len,&father,&flag);	DBG("DEBUG:pike_check_req: src IP [%.*s]; hit node = [%d][%d] flags=%d\n",		(int)msg->rcv.src_ip.len,msg->rcv.src_ip.u.addr,		node->hits,node->leaf_hits,flag);	/* do all the job with the timer */	lock( &locks[TIMER_LOCK]);	if ( flag&NEW_NODE ) {		/* put this node into the timer list and remove from list its		   father, if this is not a LEAF_NODE */		node->tl.timeout =  get_ticks() + timeout;		append_to_timer(timer,&(node->tl));		if (father->leaf_hits<=0)			remove_from_timer(timer,&(father->tl));	} else {		/* update the timer */		//remove_from_timer(timer,&(node->tl));		node->tl.timeout = get_ticks() + timeout;		append_to_timer(timer,&(node->tl));	}	unlock(&locks[TIMER_LOCK]);	/*DEBUG - print_timer_list(timer);*/	ret = ( (flag&LEAF_NODE)&&(flag&RED_NODE) )?-1:1;	unlock( &locks[TREE_LOCK] );	if (ret==-1)		LOG(L_WARN,"DEBUG:pike_check_req:---RED ALARM<->TOO MANY HITS---!!\n");	return ret;}