[oi-dev] More on USB failure to automount
Andreas Wacknitz
a.wacknitz at gmx.de
Tue Oct 12 10:44:11 UTC 2021
> Am 10.10.2021 um 21:43 schrieb Gary Mills <gary_mills at fastmail.fm>:
>
> On Sun, Oct 10, 2021 at 10:33:07AM +0200, Andreas Wacknitz wrote:
>>
>> Hi, are there any news about this bug and its fix?
>
> That patch didn't work. Neither did the next dozen or so. However, I
> did learn a great deal about glib. I know what the cause is. I just
> don't have the solution yet.
>
> One of the causes is the nature of the EAGAIN error. In the context
> of hald and glib on OI, the read() system call within glib produces
> this error when the pipe is empty, but the other end of the pipe is
> still open for write. Every subsequent read() will produce the same
> error until the process at the other end actually writes something to
> the pipe. This error is converted to G_IO_STATUS_AGAIN by glib. hald
> only processes lines when the status returned by
> g_io_channel_read_line() is G_IO_STATUS_NORMAL . It ignores any
> others, including G_IO_STATUS_AGAIN .
>
> The other cause is that lines written by hald (with the write() system
> call) to the pipe all end with "\n\0". Yes, the trailing null is
> written to and read back from the pipe. However, hald does not set
> the line terminator as glib expects, instead relying on glib's
> automatic line ending determination. In this case, that appears not
> to work. Instead, glib does a second read, which always sets the
> status to G_IO_STATUS_AGAIN . Once set, this status replaces any
> previous status.
>
> As you can see, hald writes lines to the pipe with write() but reads
> them back with g_io_channel_read_line(). That design may be a third
> cause.
>
> I'm going to do a bit more testing with hald and glib, and then return
> to what I was doing with OI.
>
>
Thank your for your update and good luck on your way of fixing this issue.
Andreas
More information about the oi-dev
mailing list