Skip to content

Commit c56ec77

Browse files
authored
Merge pull request #82564 from al45tair/eng/PR-154346018-6.2
[Concurrency] Prevent negative sleeps from sleeping forever.
2 parents 7d10f95 + c9606ba commit c56ec77

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

stdlib/public/Concurrency/DispatchGlobalExecutor.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,9 @@ void swift_dispatchEnqueueWithDeadline(bool global,
333333
}
334334

335335
uint64_t deadline;
336-
if (__builtin_mul_overflow(sec, NSEC_PER_SEC, &deadline)
336+
if (sec < 0 || sec == 0 && nsec < 0)
337+
deadline = 0;
338+
else if (__builtin_mul_overflow(sec, NSEC_PER_SEC, &deadline)
337339
|| __builtin_add_overflow(nsec, deadline, &deadline)) {
338340
deadline = UINT64_MAX;
339341
}
@@ -342,8 +344,10 @@ void swift_dispatchEnqueueWithDeadline(bool global,
342344

343345
if (tnsec != -1) {
344346
uint64_t leeway;
345-
if (__builtin_mul_overflow(tsec, NSEC_PER_SEC, &leeway)
346-
|| __builtin_add_overflow(tnsec, leeway, &leeway)) {
347+
if (tsec < 0 || tsec == 0 && tnsec < 0)
348+
leeway = 0;
349+
else if (__builtin_mul_overflow(tsec, NSEC_PER_SEC, &leeway)
350+
|| __builtin_add_overflow(tnsec, leeway, &leeway)) {
347351
leeway = UINT64_MAX;
348352
}
349353

0 commit comments

Comments
 (0)