use random number as pid on linux

Reason: Flatpak might use same pid for several instances.
This commit is contained in:
David Kocik 2025-01-16 15:28:44 +01:00 committed by Lukas Matena
parent 161095d593
commit 9c3829c879

View File

@ -12,6 +12,7 @@
#include <ctime>
#include <cstdarg>
#include <stdio.h>
#include <random>
#include "Platform.hpp"
#include "Time.hpp"
@ -941,8 +942,25 @@ unsigned get_current_pid()
{
#ifdef WIN32
return GetCurrentProcessId();
#else
#elif __APPLE__
return ::getpid();
#else
// On flatpak getpid() might return same number for each concurent instances.
static std::atomic<unsigned> instance_uuid{0};
if (instance_uuid == 0) {
unsigned generated_value;
{
// Use a thread-local random engine
thread_local std::random_device rd;
thread_local std::mt19937 generator(rd());
std::uniform_int_distribution<unsigned> distribution;
generated_value = distribution(generator);
}
unsigned expected = 0;
// Atomically initialize the instance_uuid if it has not been set
instance_uuid.compare_exchange_strong(expected, generated_value);
}
return instance_uuid.load();
#endif
}