aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2021-09-03 22:22:39 +0200
committerAlexander Couzens <lynxis@fe80.eu>2021-09-04 00:00:48 +0200
commit4bfcce6c549beb9d70d88e86c8dc3dcf74d2b0f0 (patch)
tree2659e218060a7db68a05340b77135b8ac5bff8f8
parent83f06cea0a69d753ee64a44701f0292b4cfbeb86 (diff)
gprs_ns2: gprs_ns2_free_bind() should remove itself before removing nsvcs
When removing NSVCs before removing the bind from the SNS list, the removing NSVCs could trigger a creation of a new NSVC on the same bind ending in a while(true) loop. Change-Id: I6f497348f75fb479427d8a4c23313e33fbc62036
-rw-r--r--src/gb/gprs_ns2.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c
index 83a8ca07..326312c9 100644
--- a/src/gb/gprs_ns2.c
+++ b/src/gb/gprs_ns2.c
@@ -1479,16 +1479,16 @@ void gprs_ns2_free_bind(struct gprs_ns2_vc_bind *bind)
return;
bind->freed = true;
- llist_for_each_entry_safe(nsvc, tmp, &bind->nsvc, blist) {
- gprs_ns2_free_nsvc(nsvc);
- }
-
if (gprs_ns2_is_ip_bind(bind)) {
llist_for_each_entry(nse, &bind->nsi->nse, list) {
gprs_ns2_sns_del_bind(nse, bind);
}
}
+ llist_for_each_entry_safe(nsvc, tmp, &bind->nsvc, blist) {
+ gprs_ns2_free_nsvc(nsvc);
+ }
+
if (bind->driver->free_bind)
bind->driver->free_bind(bind);