]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/comm/IoCallback.cc
Source Format Enforcement (#763)
[thirdparty/squid.git] / src / comm / IoCallback.cc
index 4793e6a7520806a2d85d7a17f7e06bde0d1df788..324688b51660e5c9c411f715cc64ade22524f979 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
 #include "squid.h"
 #include "ClientInfo.h"
 #include "comm/Connection.h"
@@ -6,6 +14,7 @@
 #include "comm/Write.h"
 #include "CommCalls.h"
 #include "fde.h"
+#include "globals.h"
 
 Comm::CbEntry *Comm::iocb_table;
 
@@ -14,7 +23,7 @@ Comm::CallbackTableInit()
 {
     // XXX: convert this to a std::map<> ?
     iocb_table = static_cast<CbEntry*>(xcalloc(Squid_MaxFD, sizeof(CbEntry)));
-    for (int pos = 0; pos < Squid_MaxFD; pos++) {
+    for (int pos = 0; pos < Squid_MaxFD; ++pos) {
         iocb_table[pos].fd = pos;
         iocb_table[pos].readcb.type = IOCB_READ;
         iocb_table[pos].writecb.type = IOCB_WRITE;
@@ -25,7 +34,7 @@ void
 Comm::CallbackTableDestruct()
 {
     // release any Comm::Connections being held.
-    for (int pos = 0; pos < Squid_MaxFD; pos++) {
+    for (int pos = 0; pos < Squid_MaxFD; ++pos) {
         iocb_table[pos].readcb.conn = NULL;
         iocb_table[pos].writecb.conn = NULL;
     }
@@ -60,13 +69,9 @@ void
 Comm::IoCallback::selectOrQueueWrite()
 {
 #if USE_DELAY_POOLS
-    // stand in line if there is one
-    if (ClientInfo *clientInfo = fd_table[conn->fd].clientInfo) {
-        if (clientInfo->writeLimitingActive) {
-            quotaQueueReserv = clientInfo->quotaEnqueue(conn->fd);
-            clientInfo->kickQuotaQueue();
-            return;
-        }
+    if (BandwidthBucket *bucket = BandwidthBucket::SelectBucket(&fd_table[conn->fd])) {
+        bucket->scheduleWrite(this);
+        return;
     }
 #endif
 
@@ -102,13 +107,13 @@ Comm::IoCallback::reset()
 
 // Schedule the callback call and clear the callback
 void
-Comm::IoCallback::finish(comm_err_t code, int xerrn)
+Comm::IoCallback::finish(Comm::Flag code, int xerrn)
 {
-    debugs(5, 3, HERE << "called for " << conn << " (" << code << ", " << xerrno << ")");
+    debugs(5, 3, "called for " << conn << " (" << code << ", " << xerrn << ")");
     assert(active());
 
     /* free data */
-    if (freefunc) {
+    if (freefunc && buf) {
         freefunc(buf);
         buf = NULL;
         freefunc = NULL;
@@ -130,3 +135,4 @@ Comm::IoCallback::finish(comm_err_t code, int xerrn)
     /* Reset for next round. */
     reset();
 }
+