1 #ifndef _XRDOSSCSIRANGES_H
2 #define _XRDOSSCSIRANGES_H
38 #include <condition_variable>
51 std::condition_variable
cv;
68 trackinglenlocked_ =
false;
73 return trackingsizes_;
78 trackingsizes_ = tsizes;
81 trackinglenlocked_ =
true;
95 std::pair<off_t,off_t> trackingsizes_;
96 bool trackinglenlocked_;
108 while((p = allocList_))
110 allocList_ = allocList_->
next;
120 std::unique_lock<std::mutex> lck(rmtx_);
123 for(
auto itr = ranges_.begin(); itr != ranges_.end(); ++itr)
125 if ((*itr)->start <= end && start <= (*itr)->end)
127 if (!(rdonly && (*itr)->rdonly))
139 ranges_.push_back(nr);
147 std::unique_lock<std::mutex> l(rp->
mtx);
156 std::lock_guard<std::mutex> guard(rmtx_);
157 for(
auto itr=ranges_.begin();itr!=ranges_.end();++itr)
166 for(
auto itr=ranges_.begin(); itr != ranges_.end(); ++itr)
168 if ((*itr)->start <= rp->
end && rp->
start <= (*itr)->end)
170 if (!(rp->
rdonly && (*itr)->rdonly))
172 std::unique_lock<std::mutex> l((*itr)->mtx);
173 (*itr)->nBlockedBy--;
174 if ((*itr)->nBlockedBy == 0)
176 (*itr)->cv.notify_one();
188 std::list<XrdOssCsiRange_s *> ranges_;
195 if ((p = allocList_)) allocList_ = p->
next;
204 rp->
next = allocList_;
std::condition_variable cv
void SetTrackingInfo(XrdOssCsiPages *p, const std::pair< off_t, off_t > &tsizes, bool locked)
void SetRange(XrdOssCsiRanges *r, XrdOssCsiRange_s *rp)
const std::pair< off_t, off_t > & getTrackinglens() const
void Wait(XrdOssCsiRange_s *rp)
void RemoveRange(XrdOssCsiRange_s *rp)
void AddRange(const off_t start, const off_t end, XrdOssCsiRangeGuard &rg, bool rdonly)