mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
sync: fix chan.close() while a sending thread is waiting (#9654)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import sync
|
||||
import time
|
||||
|
||||
fn do_rec(ch chan int, resch chan i64) {
|
||||
mut sum := i64(0)
|
||||
@@ -71,3 +71,38 @@ fn test_channel_close_unbuffered() {
|
||||
sum += <-resch
|
||||
assert sum == i64(8000) * (8000 - 1) / 2
|
||||
}
|
||||
|
||||
fn test_channel_send_close_buffered() {
|
||||
ch := chan int{cap: 1}
|
||||
t := go fn (ch chan int) {
|
||||
ch <- 31
|
||||
mut x := 45
|
||||
ch <- 17 or {
|
||||
x = -133
|
||||
}
|
||||
assert x == -133
|
||||
}(ch)
|
||||
time.sleep(100 * time.millisecond)
|
||||
ch.close()
|
||||
mut r := <-ch
|
||||
r = <-ch or { 23 }
|
||||
assert r == 23
|
||||
t.wait()
|
||||
}
|
||||
|
||||
fn test_channel_send_close_unbuffered() {
|
||||
time.sleep(1 * time.second)
|
||||
ch := chan int{}
|
||||
t := go fn (ch chan int) {
|
||||
mut x := 31
|
||||
ch <- 177 or {
|
||||
x = -71
|
||||
}
|
||||
assert x == -71
|
||||
}(ch)
|
||||
time.sleep(100 * time.millisecond)
|
||||
ch.close()
|
||||
r := <-ch or { 238 }
|
||||
assert r == 238
|
||||
t.wait()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user