diff options
Diffstat (limited to 'singleapplication.cpp')
-rw-r--r-- | singleapplication.cpp | 32 |
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); |