mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
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:
@@ -7,6 +7,14 @@ import "core:mem"
|
|||||||
import "core:sync"
|
import "core:sync"
|
||||||
import "core:math/rand"
|
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.
|
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
|
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
|
candidate_idx := rand.int_max(count) if count > 0 else 0
|
||||||
|
|
||||||
sel := candidates[candidate_idx]
|
sel := candidates[candidate_idx]
|
||||||
|
|||||||
Reference in New Issue
Block a user