From a806e3678a87d7ad5ed7c7d8673b0ca9220dac4a Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 13 May 2022 17:33:52 -0400 Subject: [PATCH] network/stack: Update and add comments in down_device_interface. The function names in the comment were not been updated in some time, so synchronize those with how things presently look. Also add another possible codepath, from device_removed. This one can and is invoked from the device_reader_thread, in the case where we get B_DEVICE_NOT_FOUND from receive_data. That is now taken care of by having wait_for_thread return EDEADLK, we need only note it here. Change-Id: I18320c2831dce99a34b07de862a0a5c8b4e4e98d Reviewed-on: https://review.haiku-os.org/c/haiku/+/5311 Reviewed-by: waddlesplash --- .../kernel/network/stack/device_interfaces.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/add-ons/kernel/network/stack/device_interfaces.cpp b/src/add-ons/kernel/network/stack/device_interfaces.cpp index 543eea7126..b3c7a42187 100644 --- a/src/add-ons/kernel/network/stack/device_interfaces.cpp +++ b/src/add-ons/kernel/network/stack/device_interfaces.cpp @@ -546,14 +546,17 @@ down_device_interface(net_device_interface* interface) // Known callers are `interface_protocol_down' which gets // here via one of the following paths: // - // - domain_interface_control() [rx lock held, domain lock held] - // interface_set_down() + // - Interface::Control() + // Interface::SetDown() // interface_protocol_down() // - // - domain_interface_control() [rx lock held, domain lock held] - // remove_interface_from_domain() - // delete_interface() - // interface_set_down() + // - datalink_control() + // remove_interface() + // Interface::SetDown() etc. + // + // - device_removed() + // interface_removed_device_interface() + // remove_interface() etc. net_device* device = interface->device; @@ -566,6 +569,7 @@ down_device_interface(net_device_interface* interface) thread_id readerThread = interface->reader_thread; // make sure the reader thread is gone before shutting down the interface + // (note that we may be the reader thread) status_t status; wait_for_thread(readerThread, &status); }