From 168daebccf81e20577298899843f35cd2614e887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20Kr=C3=BCger?= <45282134+UweKrueger@users.noreply.github.com> Date: Sun, 13 Sep 2020 15:13:06 +0200 Subject: [PATCH] sync/channels: fix bug that caused 100% CPU on block (#6357) --- vlib/sync/bench/results.md | 4 ++-- vlib/sync/channels.v | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vlib/sync/bench/results.md b/vlib/sync/bench/results.md index e791a0cac6..b4735059a5 100644 --- a/vlib/sync/bench/results.md +++ b/vlib/sync/bench/results.md @@ -18,7 +18,7 @@ nobj .... number of objects to pass thru the channel 10000000 Objects transfered, results in Objects/µs -| nsend | nrec | buflen | **V (gcc -O2)** | **V (clang)** | **V (tcc)** | **Go (glang)** | **Go (gccgo -O2)** | +| nsend | nrec | buflen | **V (gcc -O2)** | **V (clang)** | **V (tcc)** | **Go (golang)** | **Go (gccgo -O2)** | | :---: | :---:| :---: | :---: | :---: | :---: | :---: | :---: | | 1 | 1 | 0 | 1.97 | 1.63 | 2.08 | 4.65 | 0.56 | | 1 | 1 | 100 | 3.05 | 2.29 | 1.93 | 18.90 | 6.08 | @@ -38,7 +38,7 @@ nobj .... number of objects to pass thru the channel 10000000 Objects transfered, results in Objects/µs -| nsend | nrec | buflen | **V (gcc -O2)** | **Go (glang)** | +| nsend | nrec | buflen | **V (gcc -O2)** | **Go (golang)** | | :---: | :---:| :---: | :---: | :---: | | 1 | 1 | 0 | 0.37 | 0.21 | | 1 | 1 | 100 | 1.03 | 0.74 | diff --git a/vlib/sync/channels.v b/vlib/sync/channels.v index 0c212f8329..86baad2bcd 100644 --- a/vlib/sync/channels.v +++ b/vlib/sync/channels.v @@ -110,7 +110,7 @@ pub fn new_channel(n u32) &Channel { fn new_channel_st(n u32, st u32) &Channel { return &Channel{ - writesem: new_semaphore_init(if n > 0 { n + 1 } else { 1 }) + writesem: new_semaphore_init(if n > 0 { n } else { 1 }) readsem: new_semaphore_init(if n > 0 { u32(0) } else { 1 }) writesem_im: new_semaphore() readsem_im: new_semaphore()