if (x->id.spi != 0) 
if (!__xfrm_state_delete(x) && x->id.spi) 
static void xfrm_timer_handler(unsigned long data){	struct xfrm_state *x = (struct xfrm_state*)data;	unsigned long now = (unsigned long)xtime.tv_sec;	long next = LONG_MAX;	int warn = 0;	spin_lock(&x->lock);	if (x->km.state == XFRM_STATE_DEAD)		goto out;	if (x->km.state == XFRM_STATE_EXPIRED)		goto expired;	if (x->lft.hard_add_expires_seconds) {		long tmo = x->lft.hard_add_expires_seconds +			x->curlft.add_time - now;		if (tmo <= 0)			goto expired;		if (tmo < next)			next = tmo;	}	if (x->lft.hard_use_expires_seconds) {		long tmo = x->lft.hard_use_expires_seconds +			(x->curlft.use_time ? : now) - now;		if (tmo <= 0)			goto expired;		if (tmo < next)			next = tmo;	}	if (x->km.dying)		goto resched;	if (x->lft.soft_add_expires_seconds) {		long tmo = x->lft.soft_add_expires_seconds +			x->curlft.add_time - now;		if (tmo <= 0)			warn = 1;		else if (tmo < next)			next = tmo;	}	if (x->lft.soft_use_expires_seconds) {		long tmo = x->lft.soft_use_expires_seconds +			(x->curlft.use_time ? : now) - now;		if (tmo <= 0)			warn = 1;		else if (tmo < next)			next = tmo;	}	if (warn)		km_state_expired(x, 0);resched:	if (next != LONG_MAX &&	    !mod_timer(&x->timer, jiffies + make_jiffies(next)))		xfrm_state_hold(x);	goto out;expired:	if (x->km.state == XFRM_STATE_ACQ && x->id.spi == 0) {		x->km.state = XFRM_STATE_EXPIRED;		wake_up(&km_waitq);		next = 2;		goto resched;	}	if (x->id.spi != 0)		km_state_expired(x, 1);	__xfrm_state_delete(x);out:	spin_unlock(&x->lock);	xfrm_state_put(x);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/4666faab095230ec8aa62da6c33391287f281154/xfrm_state.c/clean/net/xfrm/xfrm_state.c