From f1f04fa6d4da0cf5598028743fb844442bb7e7d6 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 29 Oct 2018 00:45:10 -0400 Subject: [PATCH] network/stack: Correct deinitialization order. DeleteChains() needs the chain locks and domains, so those need to be uninitialized after them. This now matches the constructor's deinitialization order. Fixes a panic exposed by the previous commit. --- src/add-ons/kernel/network/stack/stack.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/add-ons/kernel/network/stack/stack.cpp b/src/add-ons/kernel/network/stack/stack.cpp index 0e7a22c28d..83a8e66d49 100644 --- a/src/add-ons/kernel/network/stack/stack.cpp +++ b/src/add-ons/kernel/network/stack/stack.cpp @@ -877,21 +877,22 @@ uninit_stack() TRACE(("Unloading network stack\n")); put_module(NET_SOCKET_MODULE_NAME); - uninit_timers(); - uninit_device_interfaces(); - uninit_interfaces(); - uninit_domains(); uninit_notifications(); - mutex_destroy(&sChainLock); - mutex_destroy(&sInitializeChainLock); - // remove chains and families chain::DeleteChains(sProtocolChains); chain::DeleteChains(sDatalinkProtocolChains); chain::DeleteChains(sReceivingProtocolChains); + mutex_destroy(&sChainLock); + mutex_destroy(&sInitializeChainLock); + + uninit_timers(); + uninit_device_interfaces(); + uninit_interfaces(); + uninit_domains(); + struct family* current; current = sFamilies->Clear(true); while (current) {