50 unsigned int XrdBwmHandle::numQueued = 0;
79 int Same(
unsigned long long arg1,
unsigned long long arg2) {
return 0;}
109 #define tident Parms.Tident
153 refHandle(rHandle,
this);
169 const char *LclNode,
const char *RmtNode,
177 {hP->Parms.
Tident = theUsr;
178 hP->Parms.
Lfn = strdup(thePath);
179 hP->Parms.
LclNode = strdup(LclNode);
180 hP->Parms.
RmtNode = strdup(RmtNode);
209 if (old_hP) {old_hP->Next = Free; Free = old_hP; hP = 0;}
212 {
int i = minAlloc;
while(i--) {hP->Next = Free; Free = hP; hP++;}}
213 if ((hP = Free)) Free = hP->Next;
224 #define tident hP->Parms.Tident
232 int RespSize, readyH, Result,
Err;
246 if ((
Err = (readyH = Policy->
Dispatch(RespBuff, RespSize)) < 0))
251 if (!(hP = refHandle(readyH)))
252 {sprintf(RespBuff,
"%d", readyH);
254 if (!
Err) Policy->
Done(readyH);
264 if (!
Err) Policy->
Done(readyH);
266 hP->myEICB.Wait(); hP->rTime = time(0);
270 erP->setErrCode(strlen(RespBuff));
298 } hTab[256] = {{0,0}};
307 if (hTab[i].Last) {hTab[i].Last->Next = hP; hTab[i].Last = hP;}
308 else {hTab[i].First = hTab[i].Last = hP; hP->Next = 0;}
312 while(hP && hP->rHandle != refID) {pP = hP; hP = hP->Next;}
314 {
if (pP) pP->Next = hP->Next;
315 else hTab[i].First = hP->Next;
316 if (hTab[i].Last == hP) hTab[i].Last = pP;
341 {Policy->
Done(rHandle);
355 myInfo.
ATime = qTime;
356 myInfo.
BTime = rTime;
357 myInfo.
CTime = time(0);
362 Logger->
Event(myInfo);
367 if (Parms.
Lfn) {free(Parms.
Lfn); Parms.
Lfn = 0;}
380 int rc, startThread = (Policy == 0);
387 0,
"Handle Dispatcher")))
388 {
BwmEroute.
Emsg(
"setPolicy", rc,
"create handle dispatch thread");
void * XrdBwmHanXeq(void *pp)
void Done(int &Results, XrdOucErrInfo *eInfo, const char *Path=0)
static XrdBwmHandleCB * Alloc()
int Same(unsigned long long arg1, unsigned long long arg2)
int Activate(XrdOucErrInfo &einfo)
static XrdBwmHandle * Alloc(const char *theUsr, const char *thePath, const char *lclNode, const char *rmtNode, int Incoming)
static int setPolicy(XrdBwmPolicy *pP, XrdBwmLogger *lP)
virtual int Done(int rHandle)=0
virtual int Schedule(char *RespBuff, int RespSize, SchedParms &Parms)=0
virtual void Status(int &numqIn, int &numqOut, int &numXeq)=0
virtual int Dispatch(char *RespBuff, int RespSize)=0
virtual void Done(int &Result, XrdOucErrInfo *eInfo, const char *Path=0)=0
void setErrCB(XrdOucEICB *cb, unsigned long long cbarg=0)
int setErrInfo(int code, const char *emsg)
char * getMsgBuff(int &mblen)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
static int Run(pthread_t *, void *(*proc)(void *), void *arg, int opts=0, const char *desc=0)