Hey,

Samuel Thibault <samuel.thiba...@gnu.org> writes:

> Ludovic Courtès, le dim. 20 avril 2025 17:40:02 +0200, a ecrit:
>> What happens here is that reading from /dev/klog (opened with
>> O_NONBLOCK) returns ED_WOULD_BLOCK.  However Guile and its concurrency
>> framework (Fibers) don’t know about this error, hence the (non-fatal)
>> backtrace, but they do know about EAGAIN and EWOULDBLOCK.
>
>> diff --git a/trans/streamio.c b/trans/streamio.c
>> index e42ff908..cdc0af40 100644
>> --- a/trans/streamio.c
>> +++ b/trans/streamio.c
>> @@ -1011,7 +1011,13 @@ dev_read (size_t amount, void **buf, size_t *len, int 
>> nowait)
>>      {
>>        err = start_input (nowait);
>>        if (err)
>> -    return err;
>> +    {
>> +      if (err == ED_WOULD_BLOCK)
>
> Is that not already tested by start_input?

Oh right, it looks like it.

Still, ED_WOULD_BLOCK somehow reaches the client on a read(2) call:

--8<---------------cut here---------------start------------->8---
  98<--91(pid221)->io_read_request (-1 4096) ...62
  67<--68(pid221)->io_read_request (-1 1) ...57
62... = 0x40000023 (Resource temporarily unavailable) 
  98<--91(pid221)->io_select_request (1) ...95
task19(pid221)-> 3205 (pn{ 43}) = 0 
  98<--91(pid221)->io_read_request (-1 4096) = 0x9c5 ((os/device) operation 
would block) 
  45<--27(pid221)->io_write_request ("ice-9/boot-9.scm:1685:16: In procedure 
raise-exception:\nIn procedure fport_read:" -1) = 0 115
--8<---------------cut here---------------end--------------->8---

To be continued…

Thanks,
Ludo’.

Reply via email to