Qt patch: Redo select on EINTR "error" (QLocalSocket)

Thiago Macieira thiago at kde.org
Mon Nov 10 10:29:43 GMT 2008


Johannes Sixt wrote:
>Thiago Macieira schrieb:
>> Daniel Winter wrote:
>>> Can someone please take a look at the patch ( I think it ?is not
>>> really optimal as it is, but it fixes the issue with Soprano )? ?What
>>> needs to be done to get it in the qt-copy patch set?
>>
>> This was already fixed for Qt 4.4.4. See Qt task 226687.
>>
>> Attaching the official patch instead. Feel free to add it to qt-copy.
>
>+    do {
>+        if (selectForRead)
>+            retval = select(socketDescriptor + 1, &fds, 0, 0, timeout <
> 0 ? 0 : &tv);
>+        else
>+            retval = select(socketDescriptor + 1, 0, &fds, 0, timeout <
> 0 ? 0 : &tv);
>+    } while (retval == -1 && errno == EINTR);
>
>
>This seems to rely on that select() updates tv. Isn't this
> Linux-specific? Shouldn't this (at least on other platforms) calculate
> the new tv value from the elapsed time, like in Daniel's patch?

You're right. Thanks for pointing this out.

This is what the man page says:
       On Linux, select() modifies timeout to reflect the amount of time 
not slept; most  other
       implementations  do  not  do this.  (POSIX.1-2001 permits either 
behavior.)  This causes
       problems both when Linux code which reads timeout is ported to 
other operating  systems,
       and  when code is ported to Linux that reuses a struct timeval for 
multiple select()s in
       a loop without reinitializing it.  Consider  timeout  to  be  
undefined  after  select()
       returns.


I'll have to update the patch in Qt then.
-- 
  Thiago Macieira  -  thiago (AT) macieira.info - thiago (AT) kde.org
    PGP/GPG: 0x6EF45358; fingerprint:
    E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20081110/0c41d798/attachment.sig>


More information about the kde-core-devel mailing list