core/sync/chan.try_select_raw: test hook for testing the toctou

This is necessary because we need to allow the test guarantee against a
rare condition: where a third-party thread steals a value between the
validity checks can_{send,recv} and the channel operation
try_{send,recv}.
This commit is contained in:
Jack Mordaunt
2025-06-08 18:31:26 -03:00
parent 4043be8567
commit faae81ba61

View File

@@ -7,6 +7,14 @@ import "core:mem"
import "core:sync"
import "core:math/rand"
when ODIN_TEST {
/*
Hook for testing _try_select_raw allowing the test harness to manipulate the
channels prior to the select actually operating on them.
*/
__try_select_raw_pause : proc() = nil
}
/*
Determines what operations `Chan` supports.
*/
@@ -1221,6 +1229,12 @@ try_select_raw :: proc "odin" (recvs: []^Raw_Chan, sends: []^Raw_Chan, send_msgs
return -1, .None
}
when ODIN_TEST {
if __try_select_raw_pause != nil {
__try_select_raw_pause()
}
}
candidate_idx := rand.int_max(count) if count > 0 else 0
sel := candidates[candidate_idx]