[Pkg-owncloud-commits] [owncloud-client] 29/115: FolderMan: Proper singleton implementation.
Sandro Knauß
hefee-guest at moszumanska.debian.org
Fri Aug 29 22:03:56 UTC 2014
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 0350508b651d3ad16fe6ede76a975e0b41bacaaf
Author: Klaas Freitag <freitag at owncloud.com>
Date: Thu Aug 14 11:31:34 2014 +0200
FolderMan: Proper singleton implementation.
The connect in SocketAPI had to be moved because it also uses
FolderMan::instance(). And since SocketAPI is instanciated in
FolderMans constructor, this was a deadlock.
Now the connect is tried on every new socket connection in SocketAPI
but I assume that multiple attempts to connect are not an issue.
---
src/mirall/application.h | 3 ---
src/mirall/folderman.cpp | 11 +++++++++--
src/mirall/socketapi.cpp | 9 +++++----
3 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/src/mirall/application.h b/src/mirall/application.h
index 02690cc..bdd4758 100644
--- a/src/mirall/application.h
+++ b/src/mirall/application.h
@@ -28,7 +28,6 @@
#include "mirall/connectionvalidator.h"
#include "mirall/progressdispatcher.h"
#include "mirall/clientproxy.h"
-#include "mirall/folderman.h"
class QMessageBox;
class QSystemTrayIcon;
@@ -106,8 +105,6 @@ private:
QTimer _checkConnectionTimer;
- FolderMan folderManager;
-
friend class ownCloudGui; // for _startupNetworkError
};
diff --git a/src/mirall/folderman.cpp b/src/mirall/folderman.cpp
index 5729c4d..33c377a 100644
--- a/src/mirall/folderman.cpp
+++ b/src/mirall/folderman.cpp
@@ -49,14 +49,21 @@ FolderMan::FolderMan(QObject *parent) :
this, SLOT(slotScheduleSync(const QString&)));
ne_sock_init();
- Q_ASSERT(!_instance);
- _instance = this;
_socketApi = new SocketApi(this);
}
FolderMan *FolderMan::instance()
{
+ static QMutex mutex;
+ if (!_instance)
+ {
+ QMutexLocker lock(&mutex);
+ if (!_instance) {
+ _instance = new FolderMan;
+ }
+ }
+
return _instance;
}
diff --git a/src/mirall/socketapi.cpp b/src/mirall/socketapi.cpp
index 1f5f02a..7fb0618 100644
--- a/src/mirall/socketapi.cpp
+++ b/src/mirall/socketapi.cpp
@@ -187,10 +187,6 @@ SocketApi::SocketApi(QObject* parent)
}
connect(_localServer, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
- // folder watcher
- connect(FolderMan::instance(), SIGNAL(folderSyncStateChange(QString)), this, SLOT(slotUpdateFolderView(QString)));
- connect(ProgressDispatcher::instance(), SIGNAL(jobCompleted(QString,SyncFileItem)),
- SLOT(slotJobCompleted(QString,SyncFileItem)));
}
SocketApi::~SocketApi()
@@ -206,6 +202,11 @@ void SocketApi::slotNewConnection()
if( ! socket ) {
return;
}
+ // folder watcher
+ connect(FolderMan::instance(), SIGNAL(folderSyncStateChange(QString)), this, SLOT(slotUpdateFolderView(QString)));
+ connect(ProgressDispatcher::instance(), SIGNAL(jobCompleted(QString,SyncFileItem)),
+ SLOT(slotJobCompleted(QString,SyncFileItem)));
+
DEBUG << "New connection" << socket;
connect(socket, SIGNAL(readyRead()), this, SLOT(slotReadSocket()));
connect(socket, SIGNAL(disconnected()), this, SLOT(onLostConnection()));
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list