While investigating the Windows port problems it became clear that the
CommIO object is not actually related to the rest of comm systems. It is
instead a dedicated higher level disk I/O pipe manager for DiskThreads.
Given that it causes build errors in comm.cc on Windows and does not
even need to be there this patch shuffles it into the DiskThreads
library. The build issues on Windows still exist but are now limited to
just that threads library and can be avoided temporarily with simple
./configure options.
Amos
=== added file 'src/DiskIO/DiskThreads/CommIO.cc'
--- src/DiskIO/DiskThreads/CommIO.cc 1970-01-01 00:00:00 +0000
+++ src/DiskIO/DiskThreads/CommIO.cc 2012-02-04 05:29:53 +0000
@@ -0,0 +1,93 @@
+/*
+ * DEBUG: section 05 Disk I/O pipe manager
+ * AUTHOR: Harvest Derived
+ *
+ * SQUID Web Proxy Cache http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ * Squid is the result of efforts by numerous individuals from
+ * the Internet community; see the CONTRIBUTORS file for full
+ * details. Many organizations have provided support for Squid's
+ * development; see the SPONSORS file for full details. Squid is
+ * Copyrighted (C) 2001 by the Regents of the University of
+ * California; see the COPYRIGHT file for full details. Squid
+ * incorporates software developed and/or copyrighted by other
+ * sources; see the CREDITS file for full details.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ *
+ * Copyright (c) 2003, Robert Collins <[email protected]>
+ */
+
+#include "squid.h"
+#include "DiskIO/DiskThreads/CommIO.h"
+#include "fde.h"
+
+void
+CommIO::Initialise()
+{
+ /* Initialize done pipe signal */
+ int DonePipe[2];
+ if (pipe(DonePipe)) {}
+ DoneFD = DonePipe[1];
+ DoneReadFD = DonePipe[0];
+ fd_open(DoneReadFD, FD_PIPE, "async-io completetion event: main");
+ fd_open(DoneFD, FD_PIPE, "async-io completetion event: threads");
+ commSetNonBlocking(DoneReadFD);
+ commSetNonBlocking(DoneFD);
+ Comm::SetSelect(DoneReadFD, COMM_SELECT_READ, NULLFDHandler, NULL, 0);
+ Initialised = true;
+}
+
+void
+CommIO::NotifyIOClose()
+{
+ /* Close done pipe signal */
+ FlushPipe();
+ close(DoneFD);
+ close(DoneReadFD);
+ fd_close(DoneFD);
+ fd_close(DoneReadFD);
+ Initialised = false;
+}
+
+bool CommIO::Initialised = false;
+bool CommIO::DoneSignalled = false;
+int CommIO::DoneFD = -1;
+int CommIO::DoneReadFD = -1;
+
+void
+CommIO::FlushPipe()
+{
+ char buf[256];
+ FD_READ_METHOD(DoneReadFD, buf, sizeof(buf));
+}
+
+void
+CommIO::NULLFDHandler(int fd, void *data)
+{
+ FlushPipe();
+ Comm::SetSelect(fd, COMM_SELECT_READ, NULLFDHandler, NULL, 0);
+}
+
+void
+CommIO::ResetNotifications()
+{
+ if (DoneSignalled) {
+ FlushPipe();
+ DoneSignalled = false;
+ }
+}
=== renamed file 'src/CommIO.h' => 'src/DiskIO/DiskThreads/CommIO.h'
--- src/CommIO.h 2008-03-22 00:58:20 +0000
+++ src/DiskIO/DiskThreads/CommIO.h 2012-01-14 11:07:04 +0000
@@ -1,5 +1,5 @@
-#ifndef __COMMIO_H__
-#define __COMMIO_H__
+#ifndef SQUID_SRC_DISKIO_DISKTHREADS_COMMIO_H
+#define SQUID_SRC_DISKIO_DISKTHREADS_COMMIO_H
#include "fde.h"
@@ -35,4 +35,4 @@
}
};
-#endif
+#endif /* SQUID_SRC_DISKIO_DISKTHREADS_COMMIO_H */
=== modified file 'src/DiskIO/DiskThreads/aiops.cc'
--- src/DiskIO/DiskThreads/aiops.cc 2012-01-20 18:55:04 +0000
+++ src/DiskIO/DiskThreads/aiops.cc 2012-01-23 03:14:09 +0000
@@ -49,7 +49,7 @@
#if HAVE_SCHED_H
#include <sched.h>
#endif
-#include "CommIO.h"
+#include "DiskIO/DiskThreads/CommIO.h"
#include "SquidTime.h"
#include "Store.h"
=== modified file 'src/DiskIO/DiskThreads/aiops_win32.cc'
--- src/DiskIO/DiskThreads/aiops_win32.cc 2012-01-20 18:55:04 +0000
+++ src/DiskIO/DiskThreads/aiops_win32.cc 2012-01-23 03:14:09 +0000
@@ -36,7 +36,7 @@
#include "squid-old.h"
#include "squid_windows.h"
-#include "CommIO.h"
+#include "DiskIO/DiskThreads/CommIO.h"
#include "DiskThreads.h"
#include "SquidTime.h"
#include "Store.h"
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2012-01-20 18:55:04 +0000
+++ src/Makefile.am 2012-01-23 03:24:08 +0000
@@ -173,7 +173,9 @@
if USE_AIOPS_WIN32
AIOPS_SOURCE = DiskIO/DiskThreads/aiops_win32.cc
else
-AIOPS_SOURCE = DiskIO/DiskThreads/aiops.cc
+AIOPS_SOURCE = DiskIO/DiskThreads/aiops.cc \
+ DiskIO/DiskThreads/CommIO.cc \
+ DiskIO/DiskThreads/CommIO.h
endif
EXTRA_LIBRARIES = libAIO.a libBlocking.a libDiskDaemon.a libDiskThreads.a \
@@ -284,7 +286,6 @@
ClientRequestContext.h \
clientStream.cc \
clientStream.h \
- CommIO.h \
CompletionDispatcher.cc \
CompletionDispatcher.h \
CommRead.h \
@@ -522,9 +523,7 @@
$(SNMP_ALL_SOURCE) \
$(UNLINKDSOURCE) \
$(WIN32_ALL_SOURCE) \
- $(LOADABLE_MODULES_SOURCES) \
- DiskIO/DiskThreads/aiops.cc \
- DiskIO/DiskThreads/aiops_win32.cc
+ $(LOADABLE_MODULES_SOURCES)
noinst_HEADERS = \
client_side_request.cci \
@@ -835,6 +834,12 @@
DiskIO/DiskThreads/DiskThreadsIOStrategy.cc \
DiskIO/DiskThreads/DiskThreadsIOStrategy.h
+EXTRA_libDiskThreads_a_SOURCES = \
+ DiskIO/DiskThreads/aiops.cc \
+ DiskIO/DiskThreads/aiops_win32.cc \
+ DiskIO/DiskThreads/CommIO.cc \
+ DiskIO/DiskThreads/CommIO.h
+
DiskIO_DiskDaemon_diskd_SOURCES = DiskIO/DiskDaemon/diskd.cc
nodist_DiskIO_DiskDaemon_diskd_SOURCES = time.cc
DiskIO_DiskDaemon_diskd_LDADD = \
@@ -1432,8 +1437,6 @@
$(REPL_OBJS) \
$(SQUID_CPPUNIT_LA)
-# tests/stub_CommIO.cc \
-# tests/stub_comm.cc
tests_testDiskIO_SOURCES = \
CacheDigest.cc \
cbdata.cc \
@@ -2983,7 +2986,6 @@
tests/testMain.cc \
tests/testNull.h \
tests/stub_internal.cc \
- tests/stub_CommIO.cc \
tests/stub_store_rebuild.cc \
tests/stub_store_stats.cc \
fd.cc \
=== modified file 'src/comm.cc'
--- src/comm.cc 2012-01-20 18:55:04 +0000
+++ src/comm.cc 2012-01-23 03:14:09 +0000
@@ -45,7 +45,6 @@
#include "comm/Loops.h"
#include "comm/Write.h"
#include "comm/TcpAcceptor.h"
-#include "CommIO.h"
#include "CommRead.h"
#include "MemBuf.h"
#include "pconn.h"
@@ -1819,60 +1818,6 @@
}
}
-void CommIO::Initialise()
-{
- /* Initialize done pipe signal */
- int DonePipe[2];
- if (pipe(DonePipe)) {}
- DoneFD = DonePipe[1];
- DoneReadFD = DonePipe[0];
- fd_open(DoneReadFD, FD_PIPE, "async-io completetion event: main");
- fd_open(DoneFD, FD_PIPE, "async-io completetion event: threads");
- commSetNonBlocking(DoneReadFD);
- commSetNonBlocking(DoneFD);
- Comm::SetSelect(DoneReadFD, COMM_SELECT_READ, NULLFDHandler, NULL, 0);
- Initialised = true;
-}
-
-void CommIO::NotifyIOClose()
-{
- /* Close done pipe signal */
- FlushPipe();
- close(DoneFD);
- close(DoneReadFD);
- fd_close(DoneFD);
- fd_close(DoneReadFD);
- Initialised = false;
-}
-
-bool CommIO::Initialised = false;
-bool CommIO::DoneSignalled = false;
-int CommIO::DoneFD = -1;
-int CommIO::DoneReadFD = -1;
-
-void
-CommIO::FlushPipe()
-{
- char buf[256];
- FD_READ_METHOD(DoneReadFD, buf, sizeof(buf));
-}
-
-void
-CommIO::NULLFDHandler(int fd, void *data)
-{
- FlushPipe();
- Comm::SetSelect(fd, COMM_SELECT_READ, NULLFDHandler, NULL, 0);
-}
-
-void
-CommIO::ResetNotifications()
-{
- if (DoneSignalled) {
- FlushPipe();
- DoneSignalled = false;
- }
-}
-
/// Start waiting for a possibly half-closed connection to close
// by scheduling a read callback to a monitoring handler that
// will close the connection on read errors.
=== modified file 'src/tests/stub_CommIO.cc'
--- src/tests/stub_CommIO.cc 2012-01-20 18:55:04 +0000
+++ src/tests/stub_CommIO.cc 2012-01-27 07:00:41 +0000
@@ -1,5 +1,5 @@
-#include "squid-old.h"
-#include "CommIO.h"
+#include "squid.h"
+#include "DiskIO/DiskThreads/CommIO.h"
#define STUB_API "CommIO.cc"
#include "tests/STUB.h"