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.



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