71 if (bucket) {
delete [] bucket; bucket = 0;}
75 if (maxMSZ <= iniBuffSz) {maxsz = iniBuffSz;
return;}
79 if (maxMSZ > maxBuffSz) maxMSZ = maxBuffSz;
83 chunksz = maxMSZ >> minBShift;
85 chunksz = 1<<(lg2+minBShift);
86 if (chunksz < maxMSZ) {lg2++; maxsz = chunksz << 1;}
91 bucket =
new BuckVec[lg2+1];
103 int mk, buffSz, bindex = 0;
107 if (sz <= 0 || sz > maxsz)
return 0;
112 mk = sz >> minBShift;
113 if (!mk) buffSz = minBuffSz;
115 buffSz = (bindex ? minBuffSz << bindex : minBuffSz);
116 if (buffSz < sz) {bindex++; buffSz = buffSz << 1;}
118 if (bindex >= slots)
return 0;
124 bucket[bindex].numreq++;
125 if ((bp = bucket[bindex].bnext))
126 {bucket[bindex].bnext = bp->next; bucket[bindex].numbuf--;}
135 if (posix_memalign((
void **)&memp, pagsz, buffSz))
return 0;
139 if (!(bp =
new XrdBuffer(memp, buffSz, bindex|isBigBuff)))
140 {free(memp);
return 0;}
144 slotXL.Lock(); totalo += buffSz; totbuf++; slotXL.UnLock();