rem: || is_in_timer_list2(&t->uac[i].local_cancel.fr_timer)) {
add: || is_in_timer_list2(&t->uac[i].local_cancel.retr_timer)) {
context: static void unlink_timers( struct cell *t ){	int i;	int remove_fr, remove_retr;	remove_fr=0; remove_retr=0;	/* first look if we need to remove timers and play with	   costly locks at all	    note that is_in_timer_list2 is unsafe but it does not	    hurt -- transaction is already dead (wait state) so that	    noone else will install a FR/RETR timer and it can only	    be removed from timer process itself -> it is safe to	    use it without any protection	*/	if (is_in_timer_list2(&t->uas.response.fr_timer)) remove_fr=1; 	else for (i=0; i<t->nr_of_outgoings; i++)		if (is_in_timer_list2(&t->uac[i].request.fr_timer)			|| is_in_timer_list2(&t->uac[i].local_cancel.fr_timer)) {				remove_fr=1;				break;		}	if (is_in_timer_list2(&t->uas.response.retr_timer)) remove_retr=1; 	else for (i=0; i<t->nr_of_outgoings; i++)		if (is_in_timer_list2(&t->uac[i].request.retr_timer)			|| is_in_timer_list2(&t->uac[i].local_cancel.fr_timer)) {				remove_retr=1;				break;		}	/* do what we have to do....*/	if (remove_retr) {		/* RT_T1 lock is shared by all other RT timer		   lists -- we can safely lock just one		*/		lock(hash_table->timers[RT_T1_TO_1].mutex);		remove_timer_unsafe(&t->uas.response.retr_timer);		for (i=0; i<t->nr_of_outgoings; i++) {			remove_timer_unsafe(&t->uac[i].request.retr_timer);			remove_timer_unsafe(&t->uac[i].local_cancel.retr_timer);		}		unlock(hash_table->timers[RT_T1_TO_1].mutex);	}	if (remove_fr) {		/* FR lock is shared by all other FR timer		   lists -- we can safely lock just one		*/		lock(hash_table->timers[FR_TIMER_LIST].mutex);		remove_timer_unsafe(&t->uas.response.fr_timer);		for (i=0; i<t->nr_of_outgoings; i++) {			remove_timer_unsafe(&t->uac[i].request.fr_timer);			remove_timer_unsafe(&t->uac[i].local_cancel.fr_timer);		}		unlock(hash_table->timers[FR_TIMER_LIST].mutex);	}}