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