[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