I just got bit by code that looks somewhat like this:

SyncHostResponse handler;
file->Open(m_filename, m_flags, m_perms, &handler);
handler.WaitForResponse();

(here, file is a XrdCl::File*; actual code is slightly more complex, but the above suffices). For a long time, this code worked fine - the Open was the first call to XrdCl, so it never failed. However, an unrelated commit added a prior call to XrdCl::FileSystem::Query. If that ended in a fatal error, the call to file->Open failed immediately -- and the WaitForResponse() hangs indefinitely as there is no callback.

We should mark the relevant XrdCl::File and XrdCl::FileSystem asynchronous calls with the attribute warn_unused_result where available; this would have resulted in a compiler warning, which would have allowed me to avoid a deadlock.


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