From 4904d26120d3214f09d570ea489931bed953891e Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 16 Apr 2008 08:43:32 +0000 Subject: [PATCH] slightly optimized IKE_SA checkin --- src/charon/sa/ike_sa_manager.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/charon/sa/ike_sa_manager.c b/src/charon/sa/ike_sa_manager.c index af34b3264..095a54d12 100644 --- a/src/charon/sa/ike_sa_manager.c +++ b/src/charon/sa/ike_sa_manager.c @@ -777,6 +777,7 @@ static status_t checkin(private_ike_sa_manager_t *this, ike_sa_t *ike_sa) status_t retval; entry_t *entry; ike_sa_id_t *ike_sa_id; + host_t *other; ike_sa_id = ike_sa->get_id(ike_sa); @@ -793,9 +794,12 @@ static status_t checkin(private_ike_sa_manager_t *this, ike_sa_t *ike_sa) entry->checked_out = FALSE; entry->message_id = -1; /* apply remote address for DoS detection */ - DESTROY_IF(entry->other); - entry->other = ike_sa->get_other_host(ike_sa); - entry->other = entry->other->clone(entry->other); + other = ike_sa->get_other_host(ike_sa); + if (!entry->other || !other->equals(other, entry->other)) + { + DESTROY_IF(entry->other); + entry->other = other->clone(other); + } DBG2(DBG_MGR, "check-in of IKE_SA successful."); pthread_cond_signal(&(entry->condvar)); retval = SUCCESS;