Awesome, thanks!

On Mon, Jul 5, 2021 at 2:11 PM Axel Wagner <axel.wagner...@googlemail.com>
wrote:

> FWIW writing to a channel non-blockingly works like this:
>
> select {
> case ch <- v:
> default:
> }
>
> If no communication can proceed (i.e. the write would block) the default
> case is chosen.
>
> On Mon, Jul 5, 2021 at 1:09 PM Erman İmer <ermani...@gmail.com> wrote:
>
>> 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*
>>
>

-- 
*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/CAAYkT3MwE8Wo18GS4W33nFNrsfNns2JHutbTpiB9t9LZG_Zwmg%40mail.gmail.com.

Reply via email to