From e36557d542188325e62c67a4ab43be8f3f320837 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 10 Jul 2013 21:11:11 +0000 Subject: [PATCH] added Specific protected timer class RsProtectedTimer to avoid passwd deadlock. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6494 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/gui/Identity/IdDialog.cpp | 4 +- retroshare-gui/src/retroshare-gui.pro | 1 + retroshare-gui/src/util/RsProtectedTimer.h | 53 ++++++++++++++++++++ retroshare-gui/src/util/TokenQueue.cpp | 4 ++ 4 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 retroshare-gui/src/util/RsProtectedTimer.h diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 8af278c5b..e2eaa43f0 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -31,7 +31,7 @@ #include #include -#include +#include /****** * #define ID_DEBUG 1 @@ -80,7 +80,7 @@ IdDialog::IdDialog(QWidget *parent) connect( ui.radioButton_ListPseudo, SIGNAL(toggled( bool ) ), this, SLOT(ListTypeToggled( bool ) ) ); connect( ui.radioButton_ListAll, SIGNAL(toggled( bool ) ), this, SLOT(ListTypeToggled( bool ) ) ); - QTimer *timer = new QTimer(this); + QTimer *timer = new RsProtectedTimer(this); timer->connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate())); timer->start(1000); diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index 2fed8a34a..528446aa7 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -309,6 +309,7 @@ HEADERS += rshare.h \ gui/im_history/IMHistoryItemDelegate.h \ gui/im_history/IMHistoryItemPainter.h \ lang/languagesupport.h \ + util/RsProtectedTimer.h \ util/stringutil.h \ util/DateTime.h \ util/win32.h \ diff --git a/retroshare-gui/src/util/RsProtectedTimer.h b/retroshare-gui/src/util/RsProtectedTimer.h new file mode 100644 index 000000000..fcf51cebc --- /dev/null +++ b/retroshare-gui/src/util/RsProtectedTimer.h @@ -0,0 +1,53 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2013 Cyril Soler + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ + +#pragma once + +#include +#include + +#define PROTECTED_TIMER_DEBUG + +class RsProtectedTimer: public QTimer +{ + public: + RsProtectedTimer(QObject *parent) + : QTimer(parent) + { + } + + virtual void timerEvent(QTimerEvent *e) + { + if(RsAutoUpdatePage::eventsLocked()) + { +#ifdef PROTECTED_TIMER_DEBUG + std::cerr << "Timer is blocked!." << std::endl; +#endif + return ; + } + +#ifdef PROTECTED_TIMER_DEBUG + std::cerr << "Timer has passsed protection." << std::endl; +#endif + QTimer::timerEvent(e) ; + } +}; + diff --git a/retroshare-gui/src/util/TokenQueue.cpp b/retroshare-gui/src/util/TokenQueue.cpp index f62f00ca9..afdf092fc 100644 --- a/retroshare-gui/src/util/TokenQueue.cpp +++ b/retroshare-gui/src/util/TokenQueue.cpp @@ -22,6 +22,7 @@ */ #include "util/TokenQueue.h" +#include "retroshare-gui/RsAutoUpdatePage.h" #include #include @@ -118,6 +119,9 @@ void TokenQueue::doPoll(float dt) void TokenQueue::pollRequests() { + if(RsAutoUpdatePage::eventsLocked()) + return ; + double pollPeriod = 1.0; // max poll period. if (mRequests.empty()) {