diff --git a/src/Xrd/XrdLinkCtl.cc b/src/Xrd/XrdLinkCtl.cc index 30f8847..43a2095 100644 --- a/src/Xrd/XrdLinkCtl.cc +++ b/src/Xrd/XrdLinkCtl.cc @@ -117,7 +117,8 @@ XrdLink *XrdLinkCtl::Alloc(XrdNetAddr &peer, int opts) LTMutex.Lock(); if (LinkBat[peerFD]) {LTMutex.UnLock(); - Log.Emsg("Link", "attempt to reuse active link"); + snprintf(hName, sizeof(hName), "%d", peerFD); + Log.Emsg("Link", "attempt to reuse active link with FD -",hName); return (XrdLink *)0; } diff --git a/src/Xrd/XrdPollE.icc b/src/Xrd/XrdPollE.icc index ca72913..9a15d58 100644 --- a/src/Xrd/XrdPollE.icc +++ b/src/Xrd/XrdPollE.icc @@ -249,22 +249,28 @@ void XrdPollE::Start(XrdSysSemaphore *syncsem, int &retcode) jfirst = jlast = 0; num2sched = 0; for (i = 0; i < numpolled; i++) {if ((pInfo = (XrdPollInfo *)PollTab[i].data.ptr)) - {if (!(pInfo->isEnabled) && pInfo->FD >= 0) - remFD(*pInfo, PollTab[i].events); - else {pInfo->isEnabled = 0; - if (!(PollTab[i].events & pollOK) - || (PollTab[i].events & POLLRDHUP)) - Finish(*pInfo, x2Text(PollTab[i].events, eBuff)); - lp = &(pInfo->Link); - lp->NextJob = jfirst; jfirst = (XrdJob *)lp; - if (!jlast) jlast=(XrdJob *)lp; - num2sched++; + {bool removed = false; + if (!(pInfo->isEnabled) || pInfo->Poller != this) + {pInfo->Link.Hold(true); + if (!(pInfo->isEnabled) || pInfo->Poller != this) + {remFD(*pInfo, PollTab[i].events); removed = true;} + pInfo->Link.Hold(false); + } + if (!removed) + {pInfo->isEnabled = 0; + if (!(PollTab[i].events & pollOK) + || (PollTab[i].events & POLLRDHUP)) + Finish(*pInfo, x2Text(PollTab[i].events, eBuff)); + lp = &(pInfo->Link); + lp->NextJob = jfirst; jfirst = (XrdJob *)lp; + if (!jlast) jlast=(XrdJob *)lp; + num2sched++; #ifndef EPOLLONESHOT - PollTab[i].events = 0; - if (epoll_ctl(PollDfd,EPOLL_CTL_MOD,pInfo.FD,&PollTab[i])) - Log.Emsg("Poll",errno,"disable link",pInfo.Link.ID); + PollTab[i].events = 0; + if (epoll_ctl(PollDfd,EPOLL_CTL_MOD,pInfo.FD,&PollTab[i])) + Log.Emsg("Poll",errno,"disable link",pInfo.Link.ID); #endif - } + } } else Log.Emsg("Poll", "null link event!!!!"); }