Thank you! I was confused about the highlighted part "For a channel used
for notification of *just one* signal value, a buffer of size 1 is
sufficient.*" *But I am convinced after realizing the single read on the
289th line. I will also spend some time understanding how Notify writes
signals non-blockingly.

Best regards

On Mon, Jul 5, 2021 at 2:01 PM 'Axel Wagner' via golang-nuts <
golang-nuts@googlegroups.com> wrote:

> The documentation <https://golang.org/pkg/os/signal/#Notify> is actually
> very specific here:
>
> Package signal will not block sending to c: the caller must ensure that c
>> has sufficient buffer space to keep up with the expected signal rate. *For
>> a channel used for notification of just one signal value, a buffer of size
>> 1 is sufficient.*
>
>
> (emphasis mine). This is exactly such a case. We only need one signal
> value to know the context is cancelled.
>
> On Mon, Jul 5, 2021 at 12:55 PM Axel Wagner <axel.wagner...@googlemail.com>
> wrote:
>
>> On Mon, Jul 5, 2021 at 12:41 PM Erman İmer <ermani...@gmail.com> wrote:
>>
>>> I think it is not about the context's cancellation. The signal channel
>>> should have a sufficient buffer size.
>>>
>>
>> 1 is a sufficient buffer size. Note that there is *exactly one* read from
>> c.ch in
>>
>> https://github.com/golang/go/blob/912f0750472dd4f674b69ca1616bfaf377af1805/src/os/signal/signal.go#L287
>> Therefore, even if the buffer was larger, any extra buffered signals
>> would never be read. So the only possible point to having a larger buffer
>> would be to prevent a writer from blocking on writing to it.
>>
>> However, as the documentation you are quoting is pointing out, `Notify`
>> (the only writer to that channel) writes the signal non-blockingly.
>> Therefore, there is never any danger of `Notify` getting blocked. The
>> sentence you are quoting (making sure there is enough buffer size) is there
>> to assure you have enough buffer space for a signal to get delivered - not
>> to prevent `Notify` from blocking.
>>
>> Lastly, even *if* we needed more buffer space, your assumption that we
>> need as much buffer space as there are signals is wrong. A single signal
>> can be caught multiple times. So *if* we needed to be able to handle
>> multiple signals (we don't - again, there is only one read, which is the
>> one cancelling the context), we would also take into account that aspect.
>> And there just is no actually correct size of the buffer, to make sure
>> *all* signals get delivered - the number of signals that can happen before
>> a reader is ready is unbounded.
>>
>> The code as it is currently is correct.
>>
>>
>>
>>
>>>
>>> Please check the former discussion which determined the Notify
>>> function's description.
>>> https://github.com/dominikh/go-staticcheck/issues/30
>>>
>>> Best regards
>>>
>>> On Mon, Jul 5, 2021 at 1:28 PM Sean Liao <seankhl...@gmail.com> wrote:
>>>
>>>> What problem are you trying to solve?
>>>> It only makes sense for NotifyContext to receive a single signal since
>>>> a context can only be cancelled once
>>>>
>>>> On Monday, July 5, 2021 at 10:17:49 AM UTC+2 erma...@gmail.com wrote:
>>>>
>>>>> Sorry about the broken link, here is the line:
>>>>>
>>>>> https://github.com/golang/go/blob/912f0750472dd4f674b69ca1616bfaf377af1805/src/os/signal/signal.go#L284
>>>>>
>>>>> On Monday, July 5, 2021 at 11:15:11 AM UTC+3 erma...@gmail.com wrote:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I have an improvement idea for the following line in the os/signals
>>>>>> package.
>>>>>>
>>>>>> 284 c.ch = make(chan os.Signal, 1)
>>>>>>
>>>>>> Regarding the underlying function's (Notify) description ("the caller
>>>>>> must ensure that channel has sufficient buffer space to keep up with the
>>>>>> expected signal rate.") the code can be improved like the following code
>>>>>> snippet:
>>>>>>
>>>>>> cap := len(signals)
>>>>>> if cap == 0 {
>>>>>>     cap = 1
>>>>>> }
>>>>>> c.ch = make(chan os.Signal, cap)
>>>>>>
>>>>>> I wanted to discuss here first before opening my first issue :)
>>>>>>
>>>>>> Best regards
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "golang-nuts" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/golang-nuts/PpUBZ1hxBbM/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> golang-nuts+unsubscr...@googlegroups.com.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/golang-nuts/c1cd6bd9-5307-4a71-9caa-f13c354185ccn%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/golang-nuts/c1cd6bd9-5307-4a71-9caa-f13c354185ccn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>
>>>
>>> --
>>> *Erman İmer*
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to golang-nuts+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/CAAYkT3MhFw3nmx6Fduv0wRiy10uC1un3whkwYN%2BVNbJPvtApfA%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/golang-nuts/CAAYkT3MhFw3nmx6Fduv0wRiy10uC1un3whkwYN%2BVNbJPvtApfA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to a topic in the
> Google Groups "golang-nuts" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/golang-nuts/PpUBZ1hxBbM/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGrMgVFTAVzZfcruB94rntR6nqWshOC%2Bg%2BTK6FAeaiogw%40mail.gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGrMgVFTAVzZfcruB94rntR6nqWshOC%2Bg%2BTK6FAeaiogw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>


-- 
*Erman İmer*

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAAYkT3NpSo8xc_1vcyo_0VNe2mAO07_aMa_b6K4YV0keO44R1w%40mail.gmail.com.

Reply via email to