From c1a9ed9e255599f98c7520b3ec5bbd76f9b93e12 Mon Sep 17 00:00:00 2001 From: chrisparker126 Date: Sat, 9 Jul 2011 16:50:54 +0000 Subject: [PATCH] reduce contention from ForumDialog git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-cacheopt@4415 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/gui/ForumsDialog.cpp | 10 +++++++++- retroshare-gui/src/gui/ForumsDialog.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/ForumsDialog.cpp b/retroshare-gui/src/gui/ForumsDialog.cpp index 0912ae407..996b69bd6 100644 --- a/retroshare-gui/src/gui/ForumsDialog.cpp +++ b/retroshare-gui/src/gui/ForumsDialog.cpp @@ -134,6 +134,8 @@ ForumsDialog::ForumsDialog(QWidget *parent) m_bProcessSettings = false; subscribeFlags = 0; + mFillthreadCount = 0; + connect( ui.forumTreeWidget, SIGNAL( treeCustomContextMenuRequested( QPoint ) ), this, SLOT( forumListCustomPopupMenu( QPoint ) ) ); connect( ui.threadTreeWidget, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( threadListCustomPopupMenu( QPoint ) ) ); @@ -465,7 +467,9 @@ void ForumsDialog::updateDisplay() { std::list forumIds; std::list::iterator it; - if (!rsForums) + + // suspend access to forum while thread is running + if (!rsForums || (mFillthreadCount != 0)) return; if (rsForums->forumsChanged(forumIds)) @@ -770,9 +774,11 @@ void ForumsDialog::fillThreadFinished() thread = NULL; } + mFillthreadCount -= 1; #ifdef DEBUG_FORUMS std::cerr << "ForumsDialog::fillThreadFinished done" << std::endl; #endif + } void ForumsDialog::fillThreadProgress(int current, int count) @@ -866,6 +872,8 @@ void ForumsDialog::insertThreads() std::cerr << "ForumsDialog::insertThreads() Start fill thread" << std::endl; #endif + mFillthreadCount +=1; + // start thread fillThread->start(); } diff --git a/retroshare-gui/src/gui/ForumsDialog.h b/retroshare-gui/src/gui/ForumsDialog.h index 8b9074f0e..9a6850d87 100644 --- a/retroshare-gui/src/gui/ForumsDialog.h +++ b/retroshare-gui/src/gui/ForumsDialog.h @@ -136,6 +136,7 @@ private: QFont m_ForumNameFont; int lastViewType; std::string lastForumID; + int mFillthreadCount; ForumsFillThread *fillThread;