From b0a2f2049f45475c3a2a8db6d011bd1ff40ceb12 Mon Sep 17 00:00:00 2001 From: shawnz Date: Fri, 5 Sep 2025 11:55:44 +0800 Subject: [PATCH] Bug 5502937: Set TEMPDIR as socket create dir to avoid socket create permission isue on systems like WSL --- Common/helper_multiprocess.cpp | 6 +++--- Common/helper_multiprocess.h | 10 ++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Common/helper_multiprocess.cpp b/Common/helper_multiprocess.cpp index c7769b50..ee1618aa 100644 --- a/Common/helper_multiprocess.cpp +++ b/Common/helper_multiprocess.cpp @@ -188,7 +188,7 @@ int ipcCreateSocket(ipcHandle *&handle, const char *name, char path_name[50]; // Create unique name for the socket with path if SOCK_FOLDER is set. - sprintf(path_name, "%s%u", SOCK_FOLDER, getpid()); + sprintf(path_name, "%s/%u", getSocketFolder().c_str(), getpid()); unlink(path_name); memset(&servaddr, 0, sizeof(servaddr)); @@ -230,7 +230,7 @@ int ipcOpenSocket(ipcHandle *&handle) { char temp[50]; // Create unique name for the socket with path if SOCK_FOLDER is set. - sprintf(temp, "%s%u", SOCK_FOLDER, getpid()); + sprintf(temp, "%s/%u", getSocketFolder().c_str(), getpid()); strcpy(cliaddr.sun_path, temp); if (bind(sock, (struct sockaddr *)&cliaddr, sizeof(cliaddr)) < 0) { @@ -367,7 +367,7 @@ int ipcSendShareableHandle(ipcHandle *handle, memset(&cliaddr, 0, sizeof(cliaddr)); cliaddr.sun_family = AF_UNIX; char temp[20]; - sprintf(temp, "%s%u", SOCK_FOLDER, process); + sprintf(temp, "%s/%u", getSocketFolder().c_str(), process); strcpy(cliaddr.sun_path, temp); len = sizeof(cliaddr); diff --git a/Common/helper_multiprocess.h b/Common/helper_multiprocess.h index d0bdcc20..2c09b5e3 100644 --- a/Common/helper_multiprocess.h +++ b/Common/helper_multiprocess.h @@ -52,14 +52,12 @@ #include #include #endif +#include #include -// Define "/tmp" as socket creating folder for QNX -#if defined(__QNX__) -#define SOCK_FOLDER "/tmp/" -#else -#define SOCK_FOLDER "" -#endif +inline std::string getSocketFolder() { + return std::filesystem::temp_directory_path().string(); +} typedef struct sharedMemoryInfo_st { void *addr;