diff options
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; |