32 uint16_t allocSID = 1;
37 if( !pFreeSIDs.empty() )
39 allocSID = pFreeSIDs.front();
40 pFreeSIDs.pop_front();
47 if( pSIDCeiling == 0xffff )
49 allocSID = pSIDCeiling++;
52 memcpy( sid, &allocSID, 2 );
53 pAllocTime[allocSID] = time(0);
64 memcpy( &relSID, sid, 2 );
65 pFreeSIDs.push_back( relSID );
66 pAllocTime.erase( relSID );
76 memcpy( &tiSID, sid, 2 );
77 pTimeOutSIDs.insert( tiSID );
78 pAllocTime.erase( tiSID );
87 return std::any_of( pAllocTime.begin(), pAllocTime.end(),
90 return p.second <= tlim;
101 memcpy( &tiSID, sid, 2 );
102 std::set<uint16_t>::iterator it = pTimeOutSIDs.find( tiSID );
103 if( it != pTimeOutSIDs.end() )
115 memcpy( &tiSID, sid, 2 );
116 pTimeOutSIDs.erase( tiSID );
117 pFreeSIDs.push_back( tiSID );
126 std::set<uint16_t>::iterator it;
127 for( it = pTimeOutSIDs.begin(); it != pTimeOutSIDs.end(); ++it )
128 pFreeSIDs.push_back( *it );
129 pTimeOutSIDs.clear();
138 return pSIDCeiling - pFreeSIDs.size() - pTimeOutSIDs.size() - 1;
152 if( itr == pool.end() )
157 else mgr = itr->second;
168 RecycleSidMgr deleter;
169 std::shared_ptr<SIDManager> ptr( mgr, deleter );
187 if( !mgr->pRefCount )
192 auto itr = pool.begin();
193 for( ; itr != pool.end() ; ++itr )
194 if( itr->second == mgr )
Handle XRootD stream IDs.
void ReleaseTimedOut(uint8_t sid[2])
Release a timed out SID.
uint16_t GetNumberOfAllocatedSIDs() const
Number of allocated streams.
void TimeOutSID(uint8_t sid[2])
Register a SID of a request that timed out.
bool IsAnySIDOldAs(const time_t tlim) const
Check if any SID was allocated at or before a given time.
bool IsTimedOut(uint8_t sid[2])
Check if a SID is timed out.
Status AllocateSID(uint8_t sid[2])
void ReleaseAllTimedOut()
Release all timed out SIDs.
void ReleaseSID(uint8_t sid[2])
Release the SID that is no longer needed.
void Recycle(SIDManager *mgr)
std::shared_ptr< SIDManager > GetSIDMgr(const URL &url)
std::string GetChannelId() const
const uint16_t stError
An error occurred that could potentially be retried.
const uint16_t errNoMoreFreeSIDs
Procedure execution status.