]> git.ipfire.org Git - thirdparty/squid.git/blob - src/DiskIO/DiskThreads/CommIO.cc
SourceFormat Enforcement
[thirdparty/squid.git] / src / DiskIO / DiskThreads / CommIO.cc
1 /*
2 * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 /* DEBUG: section 05 Disk I/O pipe manager */
10
11 #include "squid.h"
12 #include "comm/Loops.h"
13 #include "DiskIO/DiskThreads/CommIO.h"
14 #include "fd.h"
15 #include "globals.h"
16 #include "win32.h"
17
18 void
19 CommIO::Initialize()
20 {
21 if (CommIO::Initialized)
22 return;
23
24 /* Initialize done pipe signal */
25 int DonePipe[2];
26 if (pipe(DonePipe)) {}
27 DoneFD = DonePipe[1];
28 DoneReadFD = DonePipe[0];
29 fd_open(DoneReadFD, FD_PIPE, "async-io completion event: main");
30 fd_open(DoneFD, FD_PIPE, "async-io completion event: threads");
31 commSetNonBlocking(DoneReadFD);
32 commSetNonBlocking(DoneFD);
33 Comm::SetSelect(DoneReadFD, COMM_SELECT_READ, NULLFDHandler, NULL, 0);
34 Initialized = true;
35 }
36
37 void
38 CommIO::NotifyIOClose()
39 {
40 /* Close done pipe signal */
41 FlushPipe();
42 close(DoneFD);
43 close(DoneReadFD);
44 fd_close(DoneFD);
45 fd_close(DoneReadFD);
46 Initialized = false;
47 }
48
49 bool CommIO::Initialized = false;
50 bool CommIO::DoneSignalled = false;
51 int CommIO::DoneFD = -1;
52 int CommIO::DoneReadFD = -1;
53
54 void
55 CommIO::FlushPipe()
56 {
57 char buf[256];
58 FD_READ_METHOD(DoneReadFD, buf, sizeof(buf));
59 }
60
61 void
62 CommIO::NULLFDHandler(int fd, void *)
63 {
64 FlushPipe();
65 Comm::SetSelect(fd, COMM_SELECT_READ, NULLFDHandler, NULL, 0);
66 }
67
68 void
69 CommIO::ResetNotifications()
70 {
71 if (DoneSignalled) {
72 FlushPipe();
73 DoneSignalled = false;
74 }
75 }
76