Print

Print


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