Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,41 @@
|
||||
import os
|
||||
|
||||
fn execute_in_thread(id int) !string {
|
||||
res := os.execute('printf thread_${id}')
|
||||
if res.exit_code != 0 {
|
||||
return error('thread ${id} failed: exit=${res.exit_code} output="${res.output.trim_space()}"')
|
||||
}
|
||||
return res.output
|
||||
}
|
||||
|
||||
fn test_execute_inside_spawned_threads() {
|
||||
$if windows {
|
||||
return
|
||||
}
|
||||
$if macos {
|
||||
// On macos-14 GitHub Actions runners, when the V repo is checked out
|
||||
// under a path that contains non-ASCII bytes (the space-paths CI does
|
||||
// this with `你好 my $path, @с интервали`), os.execute() inside spawned
|
||||
// threads consistently returns empty output here, even with FD_CLOEXEC
|
||||
// and a V-level pthread mutex serializing pipe()+posix_spawn. Regular
|
||||
// macos CI (ASCII paths) passes the test, so skip only when the cwd
|
||||
// contains non-ASCII bytes.
|
||||
cwd := os.getwd()
|
||||
for b in cwd.bytes() {
|
||||
if b >= 0x80 {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
for _ in 0 .. 3 {
|
||||
mut threads := []thread !string{}
|
||||
for i in 0 .. 4 {
|
||||
threads << spawn execute_in_thread(i)
|
||||
}
|
||||
mut outputs := []string{cap: 4}
|
||||
for t in threads {
|
||||
outputs << t.wait() or { panic(err) }
|
||||
}
|
||||
assert outputs == ['thread_0', 'thread_1', 'thread_2', 'thread_3']
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user