]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Transition comm_read() from FD to Comm::Connection
authorAmos Jeffries <squid3@treenet.co.nz>
Sat, 2 Oct 2010 11:27:52 +0000 (00:27 +1300)
committerAmos Jeffries <squid3@treenet.co.nz>
Sat, 2 Oct 2010 11:27:52 +0000 (00:27 +1300)
15 files changed:
src/adaptation/icap/Xaction.cc
src/client_side.cc
src/comm.cc
src/comm.h
src/dns_internal.cc
src/ftp.cc
src/gopher.cc
src/helper.cc
src/ident/Ident.cc
src/ipc/Port.cc
src/pconn.cc
src/store.cc
src/tests/stub_comm.cc
src/tunnel.cc
src/whois.cc

index f8642eeeacc7e56ab6717d966948b2e24d982398..7a286872ebdf6f810e76115b55719c804191a5f4 100644 (file)
@@ -330,7 +330,7 @@ void Adaptation::Icap::Xaction::scheduleRead()
      */
     typedef CommCbMemFunT<Adaptation::Icap::Xaction, CommIoCbParams> Dialer;
     reader = JobCallback(93, 3, Dialer, this, Adaptation::Icap::Xaction::noteCommRead);
-    comm_read(connection->fd, commBuf, readBuf.spaceSize(), reader);
+    comm_read(connection, commBuf, readBuf.spaceSize(), reader);
     updateTimeout();
 }
 
index 9e4e1c071ece21a182ebb6d895a838fca1e35ac1..7990d79da8548d47bcb42267462e85477a653a82 100644 (file)
@@ -242,7 +242,7 @@ ConnStateData::readSomeData()
 
     typedef CommCbMemFunT<ConnStateData, CommIoCbParams> Dialer;
     reader = JobCallback(33, 5, Dialer, this, ConnStateData::clientReadRequest);
-    comm_read(clientConn->fd, in.addressToReadInto(), getAvailableBufferLength(), reader);
+    comm_read(clientConn, in.addressToReadInto(), getAvailableBufferLength(), reader);
 }
 
 
index 9afff0463f490e7448db3560e6927f5dc6462c10..9ebd0d6fd8803fe14b434bc68608aece9071d438 100644 (file)
@@ -273,35 +273,35 @@ commHandleRead(int fd, void *data)
  * completes, on error, or on file descriptor close.
  */
 void
-comm_read(int fd, char *buf, int size, IOCB *handler, void *handler_data)
+comm_read(const Comm::ConnectionPointer &conn, char *buf, int size, IOCB *handler, void *handler_data)
 {
     AsyncCall::Pointer call = commCbCall(5,4, "SomeCommReadHandler",
                                          CommIoCbPtrFun(handler, handler_data));
-    comm_read(fd, buf, size, call);
+    comm_read(conn, buf, size, call);
 }
 
 void
-comm_read(int fd, char *buf, int size, AsyncCall::Pointer &callback)
+comm_read(const Comm::ConnectionPointer &conn, char *buf, int size, AsyncCall::Pointer &callback)
 {
-    debugs(5, 5, "comm_read, queueing read for FD " << fd << "; asynCall " << callback);
+    debugs(5, 5, "comm_read, queueing read for " << conn << "; asynCall " << callback);
 
     /* Make sure we are open and not closing */
-    assert(isOpen(fd));
-    assert(!fd_table[fd].closing());
-    comm_io_callback_t *ccb = COMMIO_FD_READCB(fd);
+    assert(Comm::IsConnOpen(conn));
+    assert(!fd_table[conn->fd].closing());
+    comm_io_callback_t *ccb = COMMIO_FD_READCB(conn->fd);
 
     // Make sure we are either not reading or just passively monitoring.
     // Active/passive conflicts are OK and simply cancel passive monitoring.
     if (ccb->active()) {
         // if the assertion below fails, we have an active comm_read conflict
-        assert(fd_table[fd].halfClosedReader != NULL);
-        commStopHalfClosedMonitor(fd);
+        assert(fd_table[conn->fd].halfClosedReader != NULL);
+        commStopHalfClosedMonitor(conn->fd);
         assert(!ccb->active());
     }
 
     /* Queue the read */
-    commio_set_callback(fd, IOCB_READ, ccb, callback, (char *)buf, NULL, size);
-    commSetSelect(fd, COMM_SELECT_READ, commHandleRead, ccb, 0);
+    commio_set_callback(conn->fd, IOCB_READ, ccb, callback, (char *)buf, NULL, size);
+    commSetSelect(conn->fd, COMM_SELECT_READ, commHandleRead, ccb, 0);
 }
 
 /**
@@ -1973,13 +1973,15 @@ commHalfClosedCheck(void *)
     typedef DescriptorSet::const_iterator DSCI;
     const DSCI end = TheHalfClosed->end();
     for (DSCI i = TheHalfClosed->begin(); i != end; ++i) {
-        const int fd = *i;
-        if (!fd_table[fd].halfClosedReader) { // not reading already
+        Comm::ConnectionPointer c = new Comm::Connection; // XXX: temporary. make HalfClosed a list of these.
+        c->fd = *i;
+        if (!fd_table[c->fd].halfClosedReader) { // not reading already
             AsyncCall::Pointer call = commCbCall(5,4, "commHalfClosedReader",
                                                  CommIoCbPtrFun(&commHalfClosedReader, NULL));
-            comm_read(fd, NULL, 0, call);
-            fd_table[fd].halfClosedReader = call;
-        }
+            comm_read(c, NULL, 0, call);
+            fd_table[c->fd].halfClosedReader = call;
+        } else
+            c->fd = -1; // XXX: temporary. prevent c replacement erase closing listed FD
     }
 
     WillCheckHalfClosed = false; // as far as we know
index 703cf32c53c152e0f463f99b7f0840321f0d08f6..aadecae26176f0868d07bcc08bf20dbfbf13baba 100644 (file)
@@ -76,7 +76,7 @@ extern int commSetTimeout(int fd, int, AsyncCall::Pointer &callback);
  * Set or clear the timeout for some action on an active connection.
  * API to replace commSetTimeout() when a Comm::ConnectionPointer is available.
  */
-extern int commSetConnTimeout(const Comm::ConnectionPointer &conn, int seconds, AsyncCall::Pointer &calback);
+extern int commSetConnTimeout(const Comm::ConnectionPointer &conn, int seconds, AsyncCall::Pointer &callback);
 
 SQUIDCEXTERN int ignoreErrno(int);
 SQUIDCEXTERN void commCloseAllSockets(void);
@@ -99,8 +99,8 @@ extern void comm_remove_close_handler(int fd, AsyncCall::Pointer &);
 
 extern int comm_has_pending_read_callback(int fd);
 extern bool comm_monitors_read(int fd);
-extern void comm_read(int fd, char *buf, int len, IOCB *handler, void *data);
-extern void comm_read(int fd, char *buf, int len, AsyncCall::Pointer &callback);
+extern void comm_read(const Comm::ConnectionPointer &conn, char *buf, int len, IOCB *handler, void *data);
+extern void comm_read(const Comm::ConnectionPointer &conn, char *buf, int len, AsyncCall::Pointer &callback);
 extern void comm_read_cancel(int fd, IOCB *callback, void *data);
 extern void comm_read_cancel(int fd, AsyncCall::Pointer &callback);
 extern int comm_udp_recvfrom(int fd, void *buf, size_t len, int flags, Ip::Address &from);
index 55f683ed668b8e65dfe127d1b9e3e1376797e5ac..11fb152f8c1acd428cc73289fa681fdcfbb35e34 100644 (file)
@@ -724,7 +724,7 @@ idnsInitVCConnected(const Comm::ConnectionPointer &conn, comm_err_t status, int
     vc->conn = conn;
 
     comm_add_close_handler(conn->fd, idnsVCClosed, vc);
-    comm_read(conn->fd, (char *)&vc->msglen, 2 , idnsReadVCHeader, vc);
+    comm_read(conn, (char *)&vc->msglen, 2 , idnsReadVCHeader, vc);
     vc->busy = 0;
     idnsDoSendQueryVC(vc);
 }
@@ -1273,7 +1273,7 @@ idnsReadVC(const Comm::ConnectionPointer &conn, char *buf, size_t len, comm_err_
     vc->msg->size += len;       // XXX should not access -> size directly
 
     if (vc->msg->contentSize() < vc->msglen) {
-        comm_read(conn->fd, buf + len, vc->msglen - vc->msg->contentSize(), idnsReadVC, vc);
+        comm_read(conn, buf + len, vc->msglen - vc->msg->contentSize(), idnsReadVC, vc);
         return;
     }
 
@@ -1282,7 +1282,7 @@ idnsReadVC(const Comm::ConnectionPointer &conn, char *buf, size_t len, comm_err_
 
     idnsGrokReply(vc->msg->buf, vc->msg->contentSize());
     vc->msg->clean();
-    comm_read(conn->fd, (char *)&vc->msglen, 2 , idnsReadVCHeader, vc);
+    comm_read(conn, (char *)&vc->msglen, 2 , idnsReadVCHeader, vc);
 }
 
 static void
@@ -1306,7 +1306,7 @@ idnsReadVCHeader(const Comm::ConnectionPointer &conn, char *buf, size_t len, com
     assert(vc->read_msglen <= 2);
 
     if (vc->read_msglen < 2) {
-        comm_read(conn->fd, buf + len, 2 - vc->read_msglen, idnsReadVCHeader, vc);
+        comm_read(conn, buf + len, 2 - vc->read_msglen, idnsReadVCHeader, vc);
         return;
     }
 
@@ -1315,7 +1315,7 @@ idnsReadVCHeader(const Comm::ConnectionPointer &conn, char *buf, size_t len, com
     vc->msglen = ntohs(vc->msglen);
 
     vc->msg->init(vc->msglen, vc->msglen);
-    comm_read(conn->fd, vc->msg->buf, vc->msglen, idnsReadVC, vc);
+    comm_read(conn, vc->msg->buf, vc->msglen, idnsReadVC, vc);
 }
 
 /*
index debc7ad16c0c9ee0493382bf20af512b4e5f7556..9b34c69a95b445599c7e8174aec09ecd5a12438f 100644 (file)
@@ -1701,7 +1701,7 @@ FtpStateData::scheduleReadControlReply(int buffered_ok)
 
         typedef CommCbMemFunT<FtpStateData, CommIoCbParams> Dialer;
         AsyncCall::Pointer reader = JobCallback(9, 5, Dialer, this, FtpStateData::ftpReadControlReply);
-        comm_read(ctrl.conn->fd, ctrl.buf + ctrl.offset, ctrl.size - ctrl.offset, reader);
+        comm_read(ctrl.conn, ctrl.buf + ctrl.offset, ctrl.size - ctrl.offset, reader);
     }
 }
 
index 6ad1e812494f61f96c22a688cfc840d2f83be431..48f411c6b72986386d9c7c2f5b938fa08d8e2af0 100644 (file)
@@ -866,7 +866,7 @@ gopherReadReply(const Comm::ConnectionPointer &conn, char *buf, size_t len, comm
     }
 
     if (do_next_read)
-        comm_read(conn->fd, buf, read_sz, gopherReadReply, gopherState);
+        comm_read(conn, buf, read_sz, gopherReadReply, gopherState);
 
     return;
 }
index 15995d3145224695e5b4e7b963a6b6bde9173ecc..2e0b5883c9379b5d6bb2f88a5756404a5a568747 100644 (file)
@@ -233,7 +233,7 @@ helperOpenServers(helper * hlp)
 
         comm_add_close_handler(rfd, helperServerFree, srv);
 
-        comm_read(srv->readPipe->fd, srv->rbuf, srv->rbuf_sz - 1, helperHandleRead, srv);
+        comm_read(srv->readPipe, srv->rbuf, srv->rbuf_sz - 1, helperHandleRead, srv);
     }
 
     hlp->last_restart = squid_curtime;
@@ -351,7 +351,7 @@ helperStatefulOpenServers(statefulhelper * hlp)
 
         comm_add_close_handler(rfd, helperStatefulServerFree, srv);
 
-        comm_read(srv->readPipe->fd, srv->rbuf, srv->rbuf_sz - 1, helperStatefulHandleRead, srv);
+        comm_read(srv->readPipe, srv->rbuf, srv->rbuf_sz - 1, helperStatefulHandleRead, srv);
     }
 
     hlp->last_restart = squid_curtime;
@@ -896,7 +896,7 @@ helperHandleRead(const Comm::ConnectionPointer &conn, char *buf, size_t len, com
     }
 
     if (Comm::IsConnOpen(srv->readPipe))
-        comm_read(srv->readPipe->fd, srv->rbuf + srv->roffset, srv->rbuf_sz - srv->roffset - 1, helperHandleRead, srv);
+        comm_read(srv->readPipe, srv->rbuf + srv->roffset, srv->rbuf_sz - srv->roffset - 1, helperHandleRead, srv);
 }
 
 static void
@@ -976,7 +976,7 @@ helperStatefulHandleRead(const Comm::ConnectionPointer &conn, char *buf, size_t
     }
 
     if (Comm::IsConnOpen(srv->readPipe))
-        comm_read(srv->readPipe->fd, srv->rbuf + srv->roffset, srv->rbuf_sz - srv->roffset - 1,
+        comm_read(srv->readPipe, srv->rbuf + srv->roffset, srv->rbuf_sz - srv->roffset - 1,
                   helperStatefulHandleRead, srv);
 }
 
index a4a3b78b15537e2b0cd6965dc5b87d09793bdf83..ecc069b6b0f7ad2ace22ce6f96c58f412214309e 100644 (file)
@@ -155,7 +155,7 @@ Ident::ConnectDone(const Comm::ConnectionPointer &conn, comm_err_t status, int x
               conn->remote.GetPort(),
               conn->local.GetPort());
     comm_write_mbuf(conn, &mb, NULL, state);
-    comm_read(conn->fd, state->buf, BUFSIZ, Ident::ReadReply, state);
+    comm_read(conn, state->buf, BUFSIZ, Ident::ReadReply, state);
     commSetTimeout(conn->fd, Ident::TheConfig.timeout, Ident::Timeout, state);
 }
 
index ccf6ecbee2de6afd8704ac83fd870b1e25b6a67e..1b02099a6a25a65f653eb7f72a87a1f16bfeb3a7 100644 (file)
@@ -34,7 +34,7 @@ void Ipc::Port::listen()
     typedef CommCbMemFunT<Port, CommIoCbParams> Dialer;
     AsyncCall::Pointer readHandler = JobCallback(54, 6,
                                      Dialer, this, Port::noteRead);
-    comm_read(conn()->fd, buf.raw(), buf.size(), readHandler);
+    comm_read(conn(), buf.raw(), buf.size(), readHandler);
 }
 
 bool Ipc::Port::doneAll() const
index d8a1e593ca89f7954a7d54059e8684ade4bc36c8..21b91e6121c980b2862448728d7f891729cf517a 100644 (file)
@@ -126,8 +126,10 @@ IdleConnList::push(int fd)
     }
 
     fds[nfds++] = fd;
-    comm_read(fd, fakeReadBuf, sizeof(fakeReadBuf), IdleConnList::read, this);
-    commSetTimeout(fd, Config.Timeout.pconn, IdleConnList::timeout, this);
+    Comm::ConnectionPointer temp = new Comm::Connection; // XXX: transition. until pconn's converted to store Comm::Connection
+    temp->fd = fd; // assume control of the fd.
+    comm_read(temp, fakeReadBuf, sizeof(fakeReadBuf), IdleConnList::read, this);
+    commSetTimeout(temp->fd, Config.Timeout.pconn, IdleConnList::timeout, this);
 }
 
 /*
index ab8d7fd275a4d96b5dcfc9b5b2a8d749e84ffd94..7767dffdaa71b8dc3a5dcd1830d4b87f5c1d0702 100644 (file)
  */
 
 #include "squid.h"
+#include "CacheManager.h"
+#include "comm/Connection.h"
 #include "event.h"
+#if DELAY_POOLS
+#include "DelayPools.h"
+#endif
 #include "fde.h"
-#include "Store.h"
-#include "CacheManager.h"
-#include "StoreClient.h"
-#include "stmem.h"
 #include "HttpReply.h"
 #include "HttpRequest.h"
-#include "MemObject.h"
 #include "mem_node.h"
-#include "StoreMeta.h"
-#include "SwapDir.h"
-#if DELAY_POOLS
-#include "DelayPools.h"
-#endif
-#include "Stack.h"
+#include "MemObject.h"
 #include "SquidTime.h"
+#include "Stack.h"
+#include "stmem.h"
+#include "Store.h"
+#include "StoreClient.h"
+#include "StoreMeta.h"
 #include "swap_log_op.h"
+#include "SwapDir.h"
 
 static STMCB storeWriteComplete;
 
@@ -257,11 +258,13 @@ StoreEntry::delayAwareRead(int fd, char *buf, int len, AsyncCall::Pointer callba
 
     }
 
-    comm_read(fd, buf, amountToRead, callback);
+    Comm::ConnectionPointer temp = new Comm::Connection; // XXX: transition. until conn passed in.
+    temp->fd = fd;
+    comm_read(temp, buf, amountToRead, callback);
 }
 
 size_t
-StoreEntry::bytesWanted (Range<size_t> const aRange) const
+StoreEntry::bytesWanted(Range<size_t> const aRange) const
 {
     assert (aRange.size());
 
index 132d5732de068288d06f17f9ac31db63ad034a1c..95a94f23480f6b714a32625ac618bf8a2b2305fe 100644 (file)
@@ -60,13 +60,13 @@ DeferredReadManager::kickReads(int const count)
 }
 
 void
-comm_read(int fd, char *buf, int size, IOCB *handler, void *handler_data)
+comm_read(const Comm::ConnectionPointer &conn, char *buf, int size, IOCB *handler, void *handler_data)
 {
     fatal ("Not implemented");
 }
 
 void
-comm_read(int, char*, int, AsyncCall::Pointer &callback)
+comm_read(const Comm::ConnectionPointer &conn, char*, int, AsyncCall::Pointer &callback)
 {
     fatal ("Not implemented");
 }
index 5d9d90f8ed37b158dcc05ceba3b0fa75ebae2d8b..1c1c0a6a09299273e7d71f55467db93212c8184b 100644 (file)
@@ -454,7 +454,7 @@ void
 TunnelStateData::copyRead(Connection &from, IOCB *completion)
 {
     assert(from.len == 0);
-    comm_read(from.conn->fd, from.buf, from.bytesWanted(1, SQUID_TCP_SO_RCVBUF), completion, this);
+    comm_read(from.conn, from.buf, from.bytesWanted(1, SQUID_TCP_SO_RCVBUF), completion, this);
 }
 
 static void
index 540c7f6d917135a1a5581d7f64e322cf86b5afaf..c786686442349557b1a768586e26b5a6f11f7b6c 100644 (file)
@@ -101,7 +101,7 @@ whoisStart(FwdState * fwd)
     snprintf(buf, l, SQUIDSTRINGPH"\r\n", SQUIDSTRINGPRINT(str_print));
 
     comm_write(fwd->serverConnection(), buf, strlen(buf), whoisWriteComplete, p, NULL);
-    comm_read(fwd->serverConnection()->fd, p->buf, BUFSIZ, whoisReadReply, p);
+    comm_read(fwd->serverConnection(), p->buf, BUFSIZ, whoisReadReply, p);
     commSetTimeout(fwd->serverConnection()->fd, Config.Timeout.read, whoisTimeout, p);
 }
 
@@ -194,7 +194,7 @@ WhoisState::readReply(const Comm::ConnectionPointer &conn, char *aBuffer, size_t
     }
 
     if (do_next_read)
-        comm_read(conn->fd, aBuffer, BUFSIZ, whoisReadReply, this);
+        comm_read(conn, aBuffer, BUFSIZ, whoisReadReply, this);
 }
 
 static void