Update SingleApplication

This commit is contained in:
lupoDharkael
2017-11-23 19:51:22 +01:00
parent b3d37dc2b0
commit 361f7fad18
19 changed files with 119 additions and 828 deletions

View File

@@ -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()
{
@@ -240,7 +258,7 @@ void SingleApplicationPrivate::connectToPrimary( int msecs, char connectionType
void SingleApplicationPrivate::terminate( int signum )
{
delete ((SingleApplication*)QApplication::instance())->d_ptr;
delete ((SingleApplication*)QCoreApplication::instance())->d_ptr;
::exit( 128 + signum );
}
#endif
@@ -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);