← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2709: WindowManager doesn't need a lock (always called from the main thread)

 

------------------------------------------------------------
revno: 2709
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Thu 2011-12-08 19:56:13 +0100
message:
  WindowManager doesn't need a lock (always called from the main thread)
modified:
  dcpp/WindowManager.cpp
  dcpp/WindowManager.h
  win32/MainWindow.cpp


--
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 'dcpp/WindowManager.cpp'
--- dcpp/WindowManager.cpp	2011-05-06 22:46:06 +0000
+++ dcpp/WindowManager.cpp	2011-12-08 18:56:13 +0000
@@ -40,10 +40,6 @@
 	SettingsManager::getInstance()->removeListener(this);
 }
 
-Lock WindowManager::lock() {
-	return Lock(cs);
-}
-
 void WindowManager::add(const string& id, const WindowParams& params) {
 	list.push_back(WindowInfo(id, params));
 }
@@ -57,7 +53,6 @@
 }
 
 void WindowManager::addRecent(const string& id, const WindowParams& params) {
-	Lock l(cs);
 	addRecent_(id, params, true);
 }
 
@@ -97,7 +92,6 @@
 }
 
 void WindowManager::updateRecent(const string& id, const WindowParams& params) {
-	Lock l(cs);
 	RecentList::iterator ri = recent.find(id);
 	if(ri != recent.end()) {
 		WindowInfo info(id, params);
@@ -108,7 +102,6 @@
 }
 
 void WindowManager::setMaxRecentItems(const string& id, unsigned max) {
-	Lock l(cs);
 	maxRecentItems[id] = max;
 
 	RecentList::iterator i = recent.find(id);
@@ -123,7 +116,6 @@
 }
 
 unsigned WindowManager::getMaxRecentItems(const string& id) const {
-	Lock l(cs);
 	MaxRecentItems::const_iterator i = maxRecentItems.find(id);
 	if(i == maxRecentItems.end())
 		return MAX_RECENTS_DEFAULT;
@@ -131,7 +123,6 @@
 }
 
 void WindowManager::prepareSave() const {
-	Lock l(cs);
 	prepareSave(list);
 	for(RecentList::const_iterator i = recent.begin(), iend = recent.end(); i != iend; ++i)
 		prepareSave(i->second);
@@ -213,7 +204,6 @@
 }
 
 void WindowManager::on(SettingsManagerListener::Load, SimpleXML& xml) noexcept {
-	Lock l(cs);
 	clear();
 
 	xml.resetCurrentChild();
@@ -234,8 +224,6 @@
 }
 
 void WindowManager::on(SettingsManagerListener::Save, SimpleXML& xml) noexcept {
-	Lock l(cs);
-
 	xml.addTag("Windows");
 	xml.stepIn();
 	for(WindowInfoList::const_iterator i = list.begin(), iend = list.end(); i != iend; ++i)

=== modified file 'dcpp/WindowManager.h'
--- dcpp/WindowManager.h	2011-12-03 21:53:57 +0000
+++ dcpp/WindowManager.h	2011-12-08 18:56:13 +0000
@@ -34,8 +34,6 @@
 	typedef std::vector<WindowInfo> WindowInfoList;
 	typedef std::unordered_map<string, WindowInfoList> RecentList;
 
-	Lock lock();
-
 	void add(const string& id, const WindowParams& params);
 	void clear();
 	const WindowInfoList& getList();
@@ -57,7 +55,6 @@
 private:
 	friend class Singleton<WindowManager>;
 
-	mutable CriticalSection cs;
 	WindowInfoList list;
 	RecentList recent;
 	MaxRecentItems maxRecentItems;

=== modified file 'win32/MainWindow.cpp'
--- win32/MainWindow.cpp	2011-12-04 22:17:45 +0000
+++ win32/MainWindow.cpp	2011-12-08 18:56:13 +0000
@@ -182,9 +182,7 @@
 	{
 		bool skipHubCon = WinUtil::isShift();
 
-		WindowManager* wm = WindowManager::getInstance();
-		auto lock = wm->lock();
-		const auto& list = wm->getList();
+		const auto& list = WindowManager::getInstance()->getList();
 
 		for(auto i = list.cbegin(), iend = list.cend(); i != iend; ++i) {
 			auto id = i->getId();
@@ -651,14 +649,13 @@
 }
 
 template<typename T, typename configureF>
-void addRecentMenu(const WindowManager::RecentList& recent, MenuPtr& menu, MainWindow* mainWindow,
-						  const tstring& text, unsigned iconId, unsigned favIconId, configureF f)
-{
+void addRecentMenu(MenuPtr& menu, MainWindow* mainWindow, const tstring& text, unsigned iconId, unsigned favIconId, configureF f) {
 	MenuPtr popup = menu->appendPopup(text, WinUtil::menuIcon(iconId));
 	popup->appendItem(T_("&Configure..."), std::bind(f, mainWindow, T::id, text),
 		WinUtil::menuIcon(IDI_SETTINGS), true, true);
 	popup->appendSeparator();
 
+	const auto& recent = WindowManager::getInstance()->getRecent();
 	auto it = recent.find(T::id);
 	if(it == recent.end()) {
 		popup->appendItem(T_("(No recent item found)"), 0, 0, false);
@@ -686,16 +683,10 @@
 void MainWindow::handleRecent(const dwt::ScreenCoordinate& pt) {
 	MenuPtr menu = addChild(WinUtil::Seeds::menu);
 
-	{
-		WindowManager* wm = WindowManager::getInstance();
-		auto lock = wm->lock();
-		const auto& recent = wm->getRecent();
-
-		auto f = &MainWindow::handleConfigureRecent;
-		addRecentMenu<HubFrame>(recent, menu, this, T_("Recent hubs"), IDI_HUB, IDI_FAVORITE_HUBS, f);
-		addRecentMenu<PrivateFrame>(recent, menu, this, T_("Recent PMs"), IDI_PRIVATE, IDI_FAVORITE_USER_ON, f);
-		addRecentMenu<DirectoryListingFrame>(recent, menu, this, T_("Recent file lists"), IDI_DIRECTORY, IDI_FAVORITE_USER_ON, f);
-	}
+	auto f = &MainWindow::handleConfigureRecent;
+	addRecentMenu<HubFrame>(menu, this, T_("Recent hubs"), IDI_HUB, IDI_FAVORITE_HUBS, f);
+	addRecentMenu<PrivateFrame>(menu, this, T_("Recent PMs"), IDI_PRIVATE, IDI_FAVORITE_USER_ON, f);
+	addRecentMenu<DirectoryListingFrame>(menu, this, T_("Recent file lists"), IDI_DIRECTORY, IDI_FAVORITE_USER_ON, f);
 
 	menu->open(pt);
 }
@@ -889,8 +880,7 @@
 		const auto& views = tabs->getChildren();
 		auto active = tabs->getActive();
 
-		WindowManager* wm = WindowManager::getInstance();
-		auto lock = wm->lock();
+		auto wm = WindowManager::getInstance();
 		wm->clear();
 
 		for(auto i = views.cbegin(), iend = views.cend(); i != iend; ++i) {