diff options
author | Alexander Couzens <lynxis@fe80.eu> | 2021-09-03 22:22:39 +0200 |
---|---|---|
committer | Alexander Couzens <lynxis@fe80.eu> | 2021-09-04 00:00:48 +0200 |
commit | 4bfcce6c549beb9d70d88e86c8dc3dcf74d2b0f0 (patch) | |
tree | 2659e218060a7db68a05340b77135b8ac5bff8f8 | |
parent | 83f06cea0a69d753ee64a44701f0292b4cfbeb86 (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.c | 8 |
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); |