+/*
+ * 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"
#include "comm/Write.h"
#include "CommCalls.h"
#include "fde.h"
+#include "globals.h"
Comm::CbEntry *Comm::iocb_table;
{
// 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;
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;
}
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
// 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;
/* Reset for next round. */
reset();
}
+