summaryrefslogtreecommitdiffstats
path: root/synchronizer/listener.cpp
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/listener.cpp
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/listener.cpp')
-rw-r--r--synchronizer/listener.cpp9
1 files changed, 9 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);