← Back to team overview

linuxdcpp-team team mailing list archive

[Bug 1194299] Re: Threading issues in hub management

 

would the following be enough?

the same lock is entered in the shutdown function, which is called
before deleting Client objects.

=== modified file 'dcpp/BufferedSocket.cpp'
--- dcpp/BufferedSocket.cpp	2013-06-25 15:45:51 +0000
+++ dcpp/BufferedSocket.cpp	2013-06-25 17:00:48 +0000
@@ -454,7 +454,7 @@
 			return false;
 
 		} else if(p.first == ASYNC_CALL) {
-			if(!disconnecting) { static_cast<CallData*>(p.second.get())->f(); }
+			if(!disconnecting) { Lock l(cs); static_cast<CallData*>(p.second.get())->f(); }
 			continue;
 		}

-- 
You received this bug notification because you are a member of
Dcplusplus-team, which is subscribed to DC++.
https://bugs.launchpad.net/bugs/1194299

Title:
  Threading issues in hub management

Status in DC++:
  Fix Committed

Bug description:
  AdcHub::info is called from various different threads (timer, refresh,
  hub, GUI) but it's not thread safe. lastInfoMap is unprotected while
  it can be modified from different threads simultaneously. This has
  been fixed in AirDC++ by syncing the info calls from other threads to
  the hub thread.

  Client::updateCounts is another function that shouldn't be called from
  different threads because the hub counts may go wrong. This started to
  cause real problems in AirDC++ when the info calls from TimerManager
  were synced to the hub threads, which caused them to get executed
  asynchronously all the time.

To manage notifications about this bug go to:
https://bugs.launchpad.net/dcplusplus/+bug/1194299/+subscriptions


References