Print

Print


Ok - well, it only took me 7 months, but that strace was enough to get my brain churning.

Currently (master and 3.3 series), if we read a partial header, we don't immediately return to the poll loop.  Instead, we try to read again - *into the data buffer*.  Then, when we return again to the handler, pieces of the data buffer are read into the remaining bytes of the header.

This race condition is relatively rare (one-in-a-thousand or one-in-a-hundred ReadV) because we must both fragment the header *and* a packet has to arrive between two back-to-back calls to ReadAsync.

However, this happens frequently enough that about 10% of our jobs die due to it when using the new client.

The fix is straightforward - see pull request #108 .  This should also be backported to the stable branch; you really want to do this before the new client is used in a ROOT release.

---
Reply to this email directly or view it on GitHub:
https://github.com/xrootd/xrootd/issues/45#issuecomment-41290559

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the XROOTD-DEV list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-DEV&A=1