Skip to content

Commit 301a406

Browse files
authored
[stdlib] Buildfix OpenBSD by adding clock types. (#41857)
Reading SE-0329 and this module, two clock types are broadly defined, "continuous", which advances during suspension, and "suspending", which does not. SE-0329 notes the behavior of the clock types on "Darwin and BSD" is that `CLOCK_MONOTONIC` is "continuous" and `CLOCK_UPTIME` is "suspending". This is also true for OpenBSD (see https://man.openbsd.org/clock_gettime). Update code to match. This buildfixes this platform.
1 parent bd40059 commit 301a406

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

stdlib/public/Concurrency/Clock.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ void swift_get_time(
3737
clock_gettime(CLOCK_BOOTTIME, &continuous);
3838
*seconds = continuous.tv_sec;
3939
*nanoseconds = continuous.tv_nsec;
40-
#elif defined(__APPLE__) && HAS_TIME
40+
#elif (defined(__APPLE__) || defined(__OpenBSD__)) && HAS_TIME
4141
struct timespec continuous;
4242
clock_gettime(CLOCK_MONOTONIC, &continuous);
4343
*seconds = continuous.tv_sec;
@@ -71,6 +71,11 @@ void swift_get_time(
7171
clock_gettime(CLOCK_UPTIME_RAW, &suspending);
7272
*seconds = suspending.tv_sec;
7373
*nanoseconds = suspending.tv_nsec;
74+
#elif defined(__OpenBSD__) && HAS_TIME
75+
struct timespec suspending;
76+
clock_gettime(CLOCK_UPTIME, &suspending);
77+
*seconds = suspending.tv_sec;
78+
*nanoseconds = suspending.tv_nsec;
7479
#elif defined(_WIN32)
7580
LARGE_INTEGER freq;
7681
QueryPerformanceFrequency(&freq);
@@ -106,7 +111,7 @@ switch (clock_id) {
106111
clock_getres(CLOCK_BOOTTIME, &continuous);
107112
*seconds = continuous.tv_sec;
108113
*nanoseconds = continuous.tv_nsec;
109-
#elif defined(__APPLE__) && HAS_TIME
114+
#elif (defined(__APPLE__) || defined(__OpenBSD__)) && HAS_TIME
110115
struct timespec continuous;
111116
clock_getres(CLOCK_MONOTONIC, &continuous);
112117
*seconds = continuous.tv_sec;
@@ -129,6 +134,10 @@ switch (clock_id) {
129134
clock_getres(CLOCK_UPTIME_RAW, &suspending);
130135
*seconds = suspending.tv_sec;
131136
*nanoseconds = suspending.tv_nsec;
137+
#elif defined(__OpenBSD__) && HAS_TIME
138+
clock_getres(CLOCK_UPTIME, &suspending);
139+
*seconds = suspending.tv_sec;
140+
*nanoseconds = suspending.tv_nsec;
132141
#elif defined(_WIN32)
133142
*seconds = 0;
134143
*nanoseconds = 1000;

0 commit comments

Comments
 (0)