aboutsummaryrefslogtreecommitdiff
path: root/singleapplication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'singleapplication.cpp')
-rw-r--r--singleapplication.cpp32
1 files changed, 28 insertions, 4 deletions
diff --git a/singleapplication.cpp b/singleapplication.cpp
index 1ab69fa..8711cb1 100644
--- a/singleapplication.cpp
+++ b/singleapplication.cpp
@@ -45,6 +45,7 @@
#include "singleapplication.h"
#include "singleapplication_p.h"
+
static const char NewInstance = 'N';
static const char SecondaryInstance = 'S';
static const char Reconnect = 'R';
@@ -61,14 +62,17 @@ SingleApplicationPrivate::~SingleApplicationPrivate()
socket->close();
delete socket;
}
+
memory->lock();
InstancesInfo* inst = (InstancesInfo*)memory->data();
if( server != nullptr ) {
server->close();
delete server;
inst->primary = false;
+ inst->primaryPid = -1;
}
memory->unlock();
+
delete memory;
}
@@ -128,6 +132,8 @@ void SingleApplicationPrivate::genBlockServerName( int timeout )
void SingleApplicationPrivate::startPrimary( bool resetMemory )
{
+ Q_Q(SingleApplication);
+
#ifdef Q_OS_UNIX
// Handle any further termination signals to ensure the
// QSharedMemory block is deleted even if the process crashes
@@ -158,13 +164,13 @@ void SingleApplicationPrivate::startPrimary( bool resetMemory )
memory->lock();
InstancesInfo* inst = (InstancesInfo*)memory->data();
- if( resetMemory ){
- inst->primary = true;
+ if( resetMemory ) {
inst->secondary = 0;
- } else {
- inst->primary = true;
}
+ inst->primary = true;
+ inst->primaryPid = q->applicationPid();
+
memory->unlock();
instanceNumber = 0;
@@ -217,6 +223,18 @@ void SingleApplicationPrivate::connectToPrimary( int msecs, char connectionType
}
}
+qint64 SingleApplicationPrivate::primaryPid()
+{
+ qint64 pid;
+
+ memory->lock();
+ InstancesInfo* inst = (InstancesInfo*)memory->data();
+ pid = inst->primaryPid;
+ memory->unlock();
+
+ return pid;
+}
+
#ifdef Q_OS_UNIX
void SingleApplicationPrivate::crashHandler()
{
@@ -433,6 +451,12 @@ quint32 SingleApplication::instanceId()
return d->instanceNumber;
}
+qint64 SingleApplication::primaryPid()
+{
+ Q_D(SingleApplication);
+ return d->primaryPid();
+}
+
bool SingleApplication::sendMessage( QByteArray message, int timeout )
{
Q_D(SingleApplication);