summaryrefslogtreecommitdiff
path: root/reduced_system_layer.c
diff options
context:
space:
mode:
Diffstat (limited to 'reduced_system_layer.c')
-rw-r--r--reduced_system_layer.c23
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;