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 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/CAEkBMfGrMgVFTAVzZfcruB94rntR6nqWshOC%2Bg%2BTK6FAeaiogw%40mail.gmail.com.

Reply via email to