MCPcopy Create free account
hub / github.com/acl-dev/acl / check_idle

Method check_idle

lib_acl_cpp/independent/connpool/src/connect_pool.cpp:156–212  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

154}
155
156int connect_pool::check_idle(time_t ttl, bool exclusive /* = true */)
157{
158 if (ttl < 0)
159 return 0;
160 if (exclusive)
161 lock_->lock();
162 if (pool_.empty())
163 {
164 lock_->unlock();
165 return 0;
166 }
167
168 if (ttl == 0)
169 {
170 int n = 0;
171 std::list<connect_client*>::iterator it = pool_.begin();
172 for (; it != pool_.end(); ++it)
173 {
174 delete *it;
175 n++;
176 };
177 pool_.clear();
178 count_ = 0;
179 lock_->unlock();
180 return n;
181 }
182
183 int n = 0;
184 time_t now = time(NULL), when;
185
186 std::list<connect_client*>::iterator it, next;
187 std::list<connect_client*>::reverse_iterator rit = pool_.rbegin();
188
189 for (; rit != pool_.rend();)
190 {
191 it = --rit.base();
192 when = (*it)->get_when();
193 if (when <= 0)
194 {
195 ++rit;
196 continue;
197 }
198
199 if (now - when < ttl)
200 break;
201
202 delete *it;
203 next = pool_.erase(it);
204 rit = std::list<connect_client*>::reverse_iterator(next);
205
206 n++;
207 count_--;
208 }
209
210 lock_->unlock();
211 return n;
212}
213

Callers

nothing calls this directly

Calls 9

beginMethod · 0.80
lockMethod · 0.45
emptyMethod · 0.45
unlockMethod · 0.45
endMethod · 0.45
clearMethod · 0.45
rbeginMethod · 0.45
rendMethod · 0.45
get_whenMethod · 0.45

Tested by

no test coverage detected