After some more debugging, I have some more information: In ``XrdSys::IOEvents::Poller::CbkXeq()``, a check to see whether the "effective poller" is equal to the "real poller" fails: `` // Verify that there is a callback here and the channel is ready. If not, // disable this channel for the events being refelcted unless the event is a // fatal error. In this case we need to abandon the channel since error events // may continue to be generated as we can't always disable them. // if (!(cP->chCB) || cP->chPoller != cP->chPollXQ) {if (eNum) {cP->chPoller = &pollErr1; cP->chFault = eNum; cP->inPSet = 0; return false; } oldEvents = cP->chEvents; cP->chEvents = 0; Modify(cP, eNum, 0, isLocked); if (!isLocked) cP->chMutex.Lock(); cP->chEvents = oldEvents; return true; } `` This obviously then returns without invoking the callback. Note that ``eNum`` is not set in this case, so the poller is not set to the error object. I'm not sure why this happens - I'll keep digging. --- Reply to this email directly or view it on GitHub: https://github.com/xrootd/xrootd/issues/5#issuecomment-17006079 ######################################################################## 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