summaryrefslogtreecommitdiffstats
path: root/synchronizer
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-04-28 09:47:28 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-04-28 09:47:28 +0200
commit1e550b518fd49f954b6c422174f4a1a50f5268dc (patch)
tree2bf1825a3c29dcfd107b180a941285e1df212fa6 /synchronizer
parentde00fa24da6f5af70a8a8f95ab6d4f996ffeb6bb (diff)
downloadsink-1e550b518fd49f954b6c422174f4a1a50f5268dc.tar.gz
sink-1e550b518fd49f954b6c422174f4a1a50f5268dc.zip
Listener: Use a lockfile to enforce that only a single instance is running.
I tried using flock on a socket, but without success.
Diffstat (limited to 'synchronizer')
-rw-r--r--synchronizer/listener.cpp9
-rw-r--r--synchronizer/listener.h3
2 files changed, 12 insertions, 0 deletions
diff --git a/synchronizer/listener.cpp b/synchronizer/listener.cpp
index e930a02..e9e6188 100644
--- a/synchronizer/listener.cpp
+++ b/synchronizer/listener.cpp
@@ -33,6 +33,7 @@
33 33
34#include <QLocalSocket> 34#include <QLocalSocket>
35#include <QTimer> 35#include <QTimer>
36#include <QLockFile>
36 37
37Listener::Listener(const QByteArray &resourceName, QObject *parent) 38Listener::Listener(const QByteArray &resourceName, QObject *parent)
38 : QObject(parent), 39 : QObject(parent),
@@ -48,6 +49,14 @@ Listener::Listener(const QByteArray &resourceName, QObject *parent)
48 connect(m_server, &QLocalServer::newConnection, 49 connect(m_server, &QLocalServer::newConnection,
49 this, &Listener::acceptConnection); 50 this, &Listener::acceptConnection);
50 Trace() << "Trying to open " << m_resourceName; 51 Trace() << "Trying to open " << m_resourceName;
52
53 m_lockfile = new QLockFile(resourceName + ".lock");
54 m_lockfile->setStaleLockTime(0);
55 if (!m_lockfile->tryLock(0)) {
56 Warning() << "Failed to acquire exclusive lock on socket.";
57 exit(-1);
58 }
59
51 if (!m_server->listen(QString::fromLatin1(resourceName))) { 60 if (!m_server->listen(QString::fromLatin1(resourceName))) {
52 // FIXME: multiple starts need to be handled here 61 // FIXME: multiple starts need to be handled here
53 m_server->removeServer(resourceName); 62 m_server->removeServer(resourceName);
diff --git a/synchronizer/listener.h b/synchronizer/listener.h
index d2ef0fc..b3929e7 100644
--- a/synchronizer/listener.h
+++ b/synchronizer/listener.h
@@ -53,6 +53,8 @@ public:
53 QByteArray commandBuffer; 53 QByteArray commandBuffer;
54}; 54};
55 55
56class QLockFile;
57
56class Listener : public QObject 58class Listener : public QObject
57{ 59{
58 Q_OBJECT 60 Q_OBJECT
@@ -93,4 +95,5 @@ private:
93 QTimer *m_clientBufferProcessesTimer; 95 QTimer *m_clientBufferProcessesTimer;
94 QTimer *m_checkConnectionsTimer; 96 QTimer *m_checkConnectionsTimer;
95 int m_messageId; 97 int m_messageId;
98 QLockFile *m_lockfile;
96}; 99};