diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index cc7f448534..fac7870707 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #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 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 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 }