forked from acouzens/open5gs
cf4ad1f248
'node_timeout' and some other functions can remove a smf_sess_t while that session is still waiting for a PFCP reply and has an active PFCP xact. In this case, xact->data points to the deleted session and xact's timeout function (sess_5gc_timeout for example) eventually refers to this already freed session. This fix prevents duplicate deletes from occurring by checking to see if the session context has already been deleted when the timeout occurs. Additionally, it moves session deletions out of timer callbacks into state machine by reselect_upf(). Due to the way 'ogs_timer_mgr_expire' calls timer callbacks, one must not stop or expire timers from within a timer callback. And now one must not remove sessions from within a timer callback. |
||
---|---|---|
.. | ||
app.c | ||
arp-nd.cpp | ||
arp-nd.h | ||
context.c | ||
context.h | ||
event.c | ||
event.h | ||
gtp-path.c | ||
gtp-path.h | ||
init.c | ||
meson.build | ||
metrics.c | ||
metrics.h | ||
n4-build.c | ||
n4-build.h | ||
n4-handler.c | ||
n4-handler.h | ||
pfcp-path.c | ||
pfcp-path.h | ||
pfcp-sm.c | ||
rule-match.c | ||
rule-match.h | ||
timer.c | ||
timer.h | ||
upf-sm.c | ||
upf-sm.h |