From: Amos Jeffries Date: Sat, 25 Feb 2012 04:14:25 +0000 (-0700) Subject: SourceLayout: shuffle CommIO into DiskThreads library X-Git-Tag: SQUID_3_2_0_16~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=268ced04001f985e800a7f7fe578f1dc4650558a;p=thirdparty%2Fsquid.git SourceLayout: shuffle CommIO into DiskThreads library 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. --- diff --git a/doc/debug-sections.txt b/doc/debug-sections.txt index e79a1776d7..b40764ca3e 100644 --- a/doc/debug-sections.txt +++ b/doc/debug-sections.txt @@ -17,6 +17,7 @@ section 03 Configuration File Parsing section 03 Configuration Settings section 04 Error Generation section 05 Comm +section 05 Disk I/O pipe manager section 05 Listener Socket Handler section 05 Socket Connection Opener section 05 Socket Functions diff --git a/src/DiskIO/DiskThreads/CommIO.cc b/src/DiskIO/DiskThreads/CommIO.cc new file mode 100644 index 0000000000..3f91d28e0f --- /dev/null +++ b/src/DiskIO/DiskThreads/CommIO.cc @@ -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 + */ + +#include "squid.h" +#include "comm/Loops.h" +#include "DiskIO/DiskThreads/CommIO.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; + } +} diff --git a/src/CommIO.h b/src/DiskIO/DiskThreads/CommIO.h similarity index 81% rename from src/CommIO.h rename to src/DiskIO/DiskThreads/CommIO.h index 4577ab1eea..cd351b510e 100644 --- a/src/CommIO.h +++ b/src/DiskIO/DiskThreads/CommIO.h @@ -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 @@ CommIO::NotifyIOCompleted() } }; -#endif +#endif /* SQUID_SRC_DISKIO_DISKTHREADS_COMMIO_H */ diff --git a/src/DiskIO/DiskThreads/aiops.cc b/src/DiskIO/DiskThreads/aiops.cc index 1cf652c03f..b65c7ba35d 100644 --- a/src/DiskIO/DiskThreads/aiops.cc +++ b/src/DiskIO/DiskThreads/aiops.cc @@ -49,7 +49,7 @@ #if HAVE_SCHED_H #include #endif -#include "CommIO.h" +#include "DiskIO/DiskThreads/CommIO.h" #include "SquidTime.h" #include "Store.h" diff --git a/src/DiskIO/DiskThreads/aiops_win32.cc b/src/DiskIO/DiskThreads/aiops_win32.cc index 5afce973a4..60c007659b 100644 --- a/src/DiskIO/DiskThreads/aiops_win32.cc +++ b/src/DiskIO/DiskThreads/aiops_win32.cc @@ -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" diff --git a/src/Makefile.am b/src/Makefile.am index 0124f90d0e..f4bb1e2398 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -173,7 +173,9 @@ endif 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 @@ squid_SOURCES = \ ClientRequestContext.h \ clientStream.cc \ clientStream.h \ - CommIO.h \ CompletionDispatcher.cc \ CompletionDispatcher.h \ CommRead.h \ @@ -518,9 +519,7 @@ EXTRA_squid_SOURCES = \ $(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 \ @@ -831,6 +830,12 @@ libDiskThreads_a_SOURCES = \ 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 = \ @@ -1438,8 +1443,6 @@ tests_testCacheManager_DEPENDENCIES = \ $(REPL_OBJS) \ $(SQUID_CPPUNIT_LA) -# tests/stub_CommIO.cc \ -# tests/stub_comm.cc tests_testDiskIO_SOURCES = \ CacheDigest.cc \ cbdata.cc \ @@ -2963,7 +2966,6 @@ tests_testNull_SOURCES = \ 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 \ diff --git a/src/comm.cc b/src/comm.cc index 3a90a04ea6..0fde2694bb 100644 --- a/src/comm.cc +++ b/src/comm.cc @@ -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" @@ -1818,60 +1817,6 @@ checkTimeouts(void) } } -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. diff --git a/src/comm/Loops.h b/src/comm/Loops.h index 915abba73b..d3f7b4faf5 100644 --- a/src/comm/Loops.h +++ b/src/comm/Loops.h @@ -3,6 +3,9 @@ #include "comm_err_t.h" +// for PF +#include "typedefs.h" + /* Comm layer select loops API. * * These API functions must be implemented by all FD IO loops used by Squid. diff --git a/src/tests/stub_CommIO.cc b/src/tests/stub_CommIO.cc index 863c1ba113..ca92c49728 100644 --- a/src/tests/stub_CommIO.cc +++ b/src/tests/stub_CommIO.cc @@ -1,5 +1,5 @@ -#include "squid-old.h" -#include "CommIO.h" +#include "squid.h" +#include "DiskIO/DiskThreads/CommIO.h" bool CommIO::Initialised = false; bool CommIO::DoneSignalled = false;