Use new QNativeIpcKey based QSharedMemory constructor with Qt 6.6 and higher

Switch to the new QNativeIpcKey based QSharedMemory constructor with Qt 6.6 and higher, the old constructor will be deprecated.
This also makes the library work again with the upcoming Qt 6.6 release and higher.
However, there are still issues with releasing the existing memory in cases where the application is forcefully quit or crashed.
This commit is contained in:
Jonas Kvinge 2023-09-28 18:30:56 +02:00
parent e22a6bc235
commit 2678b4dcf5

View File

@ -67,12 +67,20 @@ SingleApplication::SingleApplication( int &argc, char *argv[], bool allowSeconda
#ifdef Q_OS_UNIX #ifdef Q_OS_UNIX
// By explicitly attaching it and then deleting it we make sure that the // By explicitly attaching it and then deleting it we make sure that the
// memory is deleted even after the process has crashed on Unix. // memory is deleted even after the process has crashed on Unix.
#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
d->memory = new QSharedMemory( QNativeIpcKey( d->blockServerName ) );
#else
d->memory = new QSharedMemory( d->blockServerName ); d->memory = new QSharedMemory( d->blockServerName );
#endif
d->memory->attach(); d->memory->attach();
delete d->memory; delete d->memory;
#endif #endif
// Guarantee thread safe behaviour with a shared memory block. // Guarantee thread safe behaviour with a shared memory block.
#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
d->memory = new QSharedMemory( QNativeIpcKey( d->blockServerName ) );
#else
d->memory = new QSharedMemory( d->blockServerName ); d->memory = new QSharedMemory( d->blockServerName );
#endif
// Create a shared memory block // Create a shared memory block
if( d->memory->create( sizeof( InstancesInfo ) )){ if( d->memory->create( sizeof( InstancesInfo ) )){