hrev52267 adds 1 changeset to branch 'master'
old head: 1147b9a49d525f9dca6e498a40de0bedccbc1000
new head: 9923dd5ce5eede90944a029852916e33d2f17450
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=9923dd5ce5ee+%5E1147b9a49d52
----------------------------------------------------------------------------
9923dd5ce5ee: network stack: move put_device_interface() at the end of the
Interface destructor.
Fixes #10919.
Removing an interface triggers this sequence:
datalink_control() calls interface->ReleaseReference() which causes the
Interface destructor to be called. The Interface destructor calls
put_device_interface(fDeviceInterface) which destroys the
net_device_interface, then calls put_domain_datalink_protocols(this,
datalink->domain)
in a loop. put_domain_datalink_protocols() tries to access the deleted
net_device_interface, hence the KDL.
Change-Id: I2326bcd6d1fd80a69e5fdfa6629563b38ecdbbac
Reviewed-on: https://review.haiku-os.org/469
Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>
Reviewed-by: Adrien Destugues <pulkomandy@xxxxxxxxx>
Reviewed-by: Jérôme Duval <jerome.duval@xxxxxxxxx>
[ JackBurton79 <stefano.ceccherini@xxxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev52267
Commit: 9923dd5ce5eede90944a029852916e33d2f17450
URL: https://git.haiku-os.org/haiku/commit/?id=9923dd5ce5ee
Author: JackBurton79 <stefano.ceccherini@xxxxxxxxx>
Date: Thu Aug 16 07:33:16 2018 UTC
Committer: Stefano Ceccherini <stefano.ceccherini@xxxxxxxxx>
Commit-Date: Thu Aug 23 06:36:11 2018 UTC
Ticket: https://dev.haiku-os.org/ticket/10919
----------------------------------------------------------------------------
1 file changed, 2 insertions(+), 2 deletions(-)
src/add-ons/kernel/network/stack/interfaces.cpp | 4 ++--
----------------------------------------------------------------------------
diff --git a/src/add-ons/kernel/network/stack/interfaces.cpp
b/src/add-ons/kernel/network/stack/interfaces.cpp
index 75cbd8c1bf..b710d29575 100644
--- a/src/add-ons/kernel/network/stack/interfaces.cpp
+++ b/src/add-ons/kernel/network/stack/interfaces.cpp
@@ -482,8 +482,6 @@ Interface::~Interface()
{
TRACE("Interface %p: destructor\n", this);
- put_device_interface(fDeviceInterface);
-
// Uninitialize the domain datalink protocols
DatalinkTable::Iterator iterator = fDatalinkTable.GetIterator();
@@ -501,6 +499,8 @@ Interface::~Interface()
delete datalink;
}
+ put_device_interface(fDeviceInterface);
+
recursive_lock_destroy(&fLock);
// Release reference of the stack - at this point, our stack may be
unloaded