]> git.ipfire.org Git - thirdparty/squid.git/blob - src/comm/AcceptLimiter.cc
Move listener socket handling to libcomm-listener.la
[thirdparty/squid.git] / src / comm / AcceptLimiter.cc
1 #include "config.h"
2 #include "comm/AcceptLimiter.h"
3 #include "comm/ListenStateData.h"
4 #include "fde.h"
5
6 Comm::AcceptLimiter Comm::AcceptLimiter::Instance_;
7
8 Comm::AcceptLimiter &Comm::AcceptLimiter::Instance()
9 {
10 return Instance_;
11 }
12
13 void
14 Comm::AcceptLimiter::defer(Comm::ListenStateData *afd)
15 {
16 afd->isLimited++;
17 debugs(5, 5, HERE << "FD " << afd->fd << " x" << afd->isLimited);
18 deferred.push_back(afd);
19 }
20
21 void
22 Comm::AcceptLimiter::kick()
23 {
24 debugs(5, 5, HERE << " size=" << deferred.size());
25 if (deferred.size() > 0 && fdNFree() >= RESERVED_FD) {
26 debugs(5, 5, HERE << " doing one.");
27 /* NP: shift() is equivalent to pop_front(). Giving us a FIFO queue. */
28 ListenStateData *temp = deferred.shift();
29 temp->isLimited--;
30 temp->acceptNext();
31 }
32 }