From f82cca5e81297ca2d7554e5ad8aad50909aa8165 Mon Sep 17 00:00:00 2001 From: vemax78 Date: Mon, 21 Oct 2013 18:54:40 +0200 Subject: [PATCH] Ignore session in teardown state --- src/ac/ac_execute.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/ac/ac_execute.c b/src/ac/ac_execute.c index f94fcbf..e9f9c16 100644 --- a/src/ac/ac_execute.c +++ b/src/ac/ac_execute.c @@ -70,12 +70,16 @@ static struct ac_session_t* ac_search_session_from_wtpaddress(struct sockaddr_st ASSERT(session != NULL); if (!capwap_compare_ip(address, (isctrlsocket ? &session->wtpctrladdress : &session->wtpdataaddress))) { - session->count++; - result = session; + /* Return session if not teardown */ + if (!session->teardown) { + session->count++; + result = session; + } + break; } - search = search->next; + search = search->next; } capwap_lock_exit(&g_ac.sessionslock); @@ -202,8 +206,11 @@ static struct ac_session_t* ac_get_session_from_keepalive(void* buffer, int buff ASSERT(session != NULL); if (!memcmp(sessionid, &session->sessionid, sizeof(struct capwap_sessionid_element))) { - session->count++; - result = session; + if (!session->teardown) { + session->count++; + result = session; + } + break; } @@ -227,7 +234,9 @@ static struct ac_session_t* ac_get_session_from_keepalive(void* buffer, int buff /* Close session */ static void ac_close_session(struct ac_session_t* session) { - ac_session_send_action(session, AC_SESSION_ACTION_CLOSE, 0, NULL, 0); + if (!session->teardown) { + ac_session_send_action(session, AC_SESSION_ACTION_CLOSE, 0, NULL, 0); + } } /* Close sessions */