session: track app session closes

Make sure applications, especially builtin ones, cannot close a session
multiple times.

Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I960a1ae89a48eb359e7e1873a59d47c298c37ef1
This commit is contained in:
Florin Coras
2023-02-20 15:14:04 -08:00
parent eff5f7aea8
commit 7c06b5790d
2 changed files with 9 additions and 2 deletions

View File

@ -1526,9 +1526,15 @@ session_half_close (session_t *s)
void
session_close (session_t * s)
{
if (!s)
if (!s || (s->flags & SESSION_F_APP_CLOSED))
return;
/* Transports can close and delete their state independent of app closes
* and transport initiated state transitions can hide app closes. Instead
* of extending the state machine to support separate tracking of app and
* transport initiated closes, use a flag. */
s->flags |= SESSION_F_APP_CLOSED;
if (s->session_state >= SESSION_STATE_CLOSING)
{
/* Session will only be removed once both app and transport

View File

@ -173,7 +173,8 @@ typedef enum
_ (IS_MIGRATING, "migrating") \
_ (UNIDIRECTIONAL, "unidirectional") \
_ (CUSTOM_FIFO_TUNING, "custom-fifo-tuning") \
_ (HALF_OPEN, "half-open")
_ (HALF_OPEN, "half-open") \
_ (APP_CLOSED, "app-closed")
typedef enum session_flags_bits_
{