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:
@ -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
|
||||
|
@ -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_
|
||||
{
|
||||
|
Reference in New Issue
Block a user