diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2025-01-20 04:59:56 +0100 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2025-01-20 04:59:56 +0100 |
commit | cf6b850591e411546b8395bcc79e57e551c1df08 (patch) | |
tree | 7b4fa8eef2c7e0f44413606b0d4b382de82ec6d0 /reduced_system_layer.c | |
parent | 0a3e59f645c0a67a97e9079e10e632e7120cecfd (diff) | |
download | reduced_system_layer-cf6b850591e411546b8395bcc79e57e551c1df08.zip |
Use incremental id for shared memory file
Diffstat (limited to 'reduced_system_layer.c')
-rw-r--r-- | reduced_system_layer.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/reduced_system_layer.c b/reduced_system_layer.c index 544628a..29087f3 100644 --- a/reduced_system_layer.c +++ b/reduced_system_layer.c @@ -1644,26 +1644,21 @@ typedef struct { } WL_Output_; static i32 anonymous_shm_open(void) { - c8 name[] = "scr_XXXXXX"; - i32 retries = 100; - - do { - --retries; - - struct timespec ts; - clock_gettime(CLOCK_REALTIME, &ts); - u64 r = ts.tv_nsec; - for (int i = 0; i < 6; ++i) { - name[sizeof name - 7 + i] = 'A' + (r&15) + (r&16) * 2; - r >>= 5; - } + c8 name[13] = "scr_XXXXXX"; + i32 retries = 1000000; + + for (i32 i = 0; i < retries; ++i) { + snprintf(name + 4, 7, "%06d", i); i32 fd = shm_open(name, O_RDWR | O_CREAT | O_EXCL, 0600); if (fd >= 0) { shm_unlink(name); return fd; } - } while (retries > 0 && errno == EEXIST); + + if (errno != EEXIST) + break; + } LOG_ERROR("shm_open failed.\n"); return -1; |