← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2759: lock when updating finished transfer data

 

------------------------------------------------------------
revno: 2759
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Tue 2011-12-27 16:21:02 +0100
message:
  lock when updating finished transfer data
modified:
  changelog.txt
  dcpp/FinishedManager.cpp
  dcpp/FinishedManager.h
  dcpp/QueueManager.cpp
  win32/FinishedFrameBase.h


--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk

Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'changelog.txt'
--- changelog.txt	2011-12-27 13:41:47 +0000
+++ changelog.txt	2011-12-27 15:21:02 +0000
@@ -57,6 +57,7 @@
 * [L#900650] Fix removal of same ADC users logged into multiple hubs when they go offline (emtee)
 * Plug memory leaks in list and tree controls (poy)
 * [L#735512] Switch to Boost.Atomic to solve freezes (poy)
+* [L#871975] Safer updating of the finished transfer window (poy)
 
 -- 0.782 2011-03-05 --
 * Prevent a remote crash triggered via malformed user commands (poy)

=== modified file 'dcpp/FinishedManager.cpp'
--- dcpp/FinishedManager.cpp	2011-12-22 22:14:45 +0000
+++ dcpp/FinishedManager.cpp	2011-12-27 15:21:02 +0000
@@ -44,7 +44,7 @@
 	clearULs();
 }
 
-Lock FinishedManager::lockLists() {
+Lock FinishedManager::lock() {
 	return Lock(cs);
 }
 

=== modified file 'dcpp/FinishedManager.h'
--- dcpp/FinishedManager.h	2011-04-13 19:16:51 +0000
+++ dcpp/FinishedManager.h	2011-12-27 15:21:02 +0000
@@ -39,7 +39,7 @@
 	typedef unordered_map<string, FinishedFileItemPtr> MapByFile;
 	typedef unordered_map<HintedUser, FinishedUserItemPtr, User::Hash> MapByUser;
 
-	Lock lockLists();
+	Lock lock();
 	const MapByFile& getMapByFile(bool upload) const;
 	const MapByUser& getMapByUser(bool upload) const;
 

=== modified file 'dcpp/QueueManager.cpp'
--- dcpp/QueueManager.cpp	2011-12-25 17:31:16 +0000
+++ dcpp/QueueManager.cpp	2011-12-27 15:21:02 +0000
@@ -1770,7 +1770,7 @@
 	params["sfv"] = Util::toString(crcError ? 1 : 0);
 
 	{
-		auto lock = FinishedManager::getInstance()->lockLists();
+		auto lock = FinishedManager::getInstance()->lock();
 
 		auto& map = FinishedManager::getInstance()->getMapByFile(false);
 		auto it = map.find(qi->getTarget());

=== modified file 'win32/FinishedFrameBase.h'
--- win32/FinishedFrameBase.h	2011-12-26 16:12:50 +0000
+++ win32/FinishedFrameBase.h	2011-12-27 15:21:02 +0000
@@ -244,6 +244,7 @@
 			if(sortCol != -1)
 				old = columns[sortCol];
 
+			auto lock = FinishedManager::getInstance()->lock();
 			{
 				StringList nicks;
 				for(auto i = entry->getUsers().begin(), iend = entry->getUsers().end(); i != iend; ++i)
@@ -331,6 +332,7 @@
 			if(sortCol != -1)
 				old = columns[sortCol];
 
+			auto lock = FinishedManager::getInstance()->lock();
 			columns[USERS_COLUMN_NICK] = WinUtil::getNicks(user);
 			columns[USERS_COLUMN_HUB] = Text::toT(Util::toString(ClientManager::getInstance()->getHubNames(user)));
 			columns[USERS_COLUMN_TRANSFERRED] = Text::toT(Util::formatBytes(entry->getTransferred()));
@@ -524,7 +526,7 @@
 	}
 
 	void updateLists() {
-		auto lock = FinishedManager::getInstance()->lockLists();
+		auto lock = FinishedManager::getInstance()->lock();
 		{
 			HoldRedraw hold(files);
 			const FinishedManager::MapByFile& map = FinishedManager::getInstance()->getMapByFile(in_UL);