diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-04-28 09:47:28 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-04-28 09:47:28 +0200 |
commit | 1e550b518fd49f954b6c422174f4a1a50f5268dc (patch) | |
tree | 2bf1825a3c29dcfd107b180a941285e1df212fa6 /synchronizer/listener.cpp | |
parent | de00fa24da6f5af70a8a8f95ab6d4f996ffeb6bb (diff) | |
download | sink-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.cpp | 9 |
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 | ||
37 | Listener::Listener(const QByteArray &resourceName, QObject *parent) | 38 | Listener::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); |