]> git.ipfire.org Git - thirdparty/squid.git/blame - src/DiskIO/DiskThreads/CommIO.cc
Boilerplate: update copyright blurbs on src/
[thirdparty/squid.git] / src / DiskIO / DiskThreads / CommIO.cc
CommitLineData
1ff991dc 1/*
bbc27441 2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
1ff991dc 3 *
bbc27441
AJ
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.
1ff991dc
AJ
7 */
8
bbc27441
AJ
9/* DEBUG: section 05 Disk I/O pipe manager */
10
1ff991dc 11#include "squid.h"
4194402d 12#include "comm/Loops.h"
1ff991dc 13#include "DiskIO/DiskThreads/CommIO.h"
c4ad1349 14#include "fd.h"
582c2af2 15#include "globals.h"
1e1a9021 16#include "win32.h"
1ff991dc
AJ
17
18void
1564ff62 19CommIO::Initialize()
1ff991dc 20{
1564ff62 21 if (CommIO::Initialized)
45bb0381
AJ
22 return;
23
1ff991dc
AJ
24 /* Initialize done pipe signal */
25 int DonePipe[2];
26 if (pipe(DonePipe)) {}
27 DoneFD = DonePipe[1];
28 DoneReadFD = DonePipe[0];
45bb0381
AJ
29 fd_open(DoneReadFD, FD_PIPE, "async-io completion event: main");
30 fd_open(DoneFD, FD_PIPE, "async-io completion event: threads");
1ff991dc
AJ
31 commSetNonBlocking(DoneReadFD);
32 commSetNonBlocking(DoneFD);
33 Comm::SetSelect(DoneReadFD, COMM_SELECT_READ, NULLFDHandler, NULL, 0);
1564ff62 34 Initialized = true;
1ff991dc
AJ
35}
36
37void
38CommIO::NotifyIOClose()
39{
40 /* Close done pipe signal */
41 FlushPipe();
42 close(DoneFD);
43 close(DoneReadFD);
44 fd_close(DoneFD);
45 fd_close(DoneReadFD);
1564ff62 46 Initialized = false;
1ff991dc
AJ
47}
48
1564ff62 49bool CommIO::Initialized = false;
1ff991dc
AJ
50bool CommIO::DoneSignalled = false;
51int CommIO::DoneFD = -1;
52int CommIO::DoneReadFD = -1;
53
54void
55CommIO::FlushPipe()
56{
57 char buf[256];
58 FD_READ_METHOD(DoneReadFD, buf, sizeof(buf));
59}
60
61void
62CommIO::NULLFDHandler(int fd, void *data)
63{
64 FlushPipe();
65 Comm::SetSelect(fd, COMM_SELECT_READ, NULLFDHandler, NULL, 0);
66}
67
68void
69CommIO::ResetNotifications()
70{
71 if (DoneSignalled) {
72 FlushPipe();
73 DoneSignalled = false;
74 }
75}