Skip to content

Commit

Permalink
[smf][sgwc] make _sess_remove functions idempotent
Browse files Browse the repository at this point in the history
  • Loading branch information
spencersevilla committed Jan 18, 2024
1 parent a6477dd commit b2e9da0
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 11 deletions.
15 changes: 12 additions & 3 deletions lib/core/ogs-pool.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,18 @@ typedef uint32_t ogs_pool_id_t;
if (((pool)->size != (pool)->avail)) \
ogs_error("%d in '%s[%d]' were not released.", \
(pool)->size - (pool)->avail, (pool)->name, (pool)->size); \
ogs_free((pool)->free); \
ogs_free((pool)->array); \
ogs_free((pool)->index); \
if ((pool)->free) {\
ogs_free((pool)->free); \
(pool)->free = NULL; \
} \
if ((pool)->array) {\
ogs_free((pool)->array); \
(pool)->array = NULL; \
} \
if ((pool)->index) {\
ogs_free((pool)->index); \
(pool)->index = NULL; \
} \
} while (0)

#define ogs_pool_index(pool, node) (((node) - (pool)->array)+1)
Expand Down
11 changes: 7 additions & 4 deletions src/sgwc/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -444,13 +444,16 @@ int sgwc_sess_remove(sgwc_sess_t *sess)

sgwc_bearer_remove_all(sess);

ogs_assert(sess->pfcp.bar);
ogs_pfcp_bar_delete(sess->pfcp.bar);
if (sess->pfcp.bar) {
ogs_pfcp_bar_delete(sess->pfcp.bar);
}

ogs_pfcp_pool_final(&sess->pfcp);

ogs_assert(sess->session.name);
ogs_free(sess->session.name);
if (sess->session.name) {
ogs_free(sess->session.name);
sess->session.name = NULL;
}

ogs_pool_free(&sgwc_sxa_seid_pool, sess->sgwc_sxa_seid_node);
ogs_pool_free(&sgwc_sess_pool, sess);
Expand Down
13 changes: 9 additions & 4 deletions src/smf/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -1733,10 +1733,14 @@ void smf_sess_remove(smf_sess_t *sess)
if (sess->policy_association_id)
ogs_free(sess->policy_association_id);

if (sess->session.name)
if (sess->session.name) {
ogs_free(sess->session.name);
if (sess->full_dnn)
sess->session.name = NULL;
}
if (sess->full_dnn) {
ogs_free(sess->full_dnn);
sess->full_dnn = NULL;
}

if (sess->session.ipv4_framed_routes) {
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
Expand Down Expand Up @@ -1775,8 +1779,9 @@ void smf_sess_remove(smf_sess_t *sess)

smf_bearer_remove_all(sess);

ogs_assert(sess->pfcp.bar);
ogs_pfcp_bar_delete(sess->pfcp.bar);
if (sess->pfcp.bar) {
ogs_pfcp_bar_delete(sess->pfcp.bar);
}

smf_sess_delete_cp_up_data_forwarding(sess);

Expand Down

0 comments on commit b2e9da0

Please sign in to comment.