]> git.ipfire.org Git - thirdparty/squid.git/blame - src/fd.cc
misc changes, but still in nonworking state
[thirdparty/squid.git] / src / fd.cc
CommitLineData
a7870688 1#include "squid.h"
2
3static void fdUpdateBiggest _PARAMS((int fd, unsigned int status));
4
5static void
6fdUpdateBiggest(int fd, unsigned int status)
7{
8 if (fd < Biggest_FD)
9 return;
edd1e84c 10 assert(fd < Squid_MaxFD);
a7870688 11 if (fd > Biggest_FD) {
edd1e84c 12 assert(status == FD_OPEN);
13 Biggest_FD = fd;
a7870688 14 return;
15 }
16 /* if we are here, then fd == Biggest_FD */
edd1e84c 17 assert(status == FD_CLOSE);
a7870688 18 while (fd_table[Biggest_FD].open != FD_OPEN)
19 Biggest_FD--;
20}
21
22void
4f92c80c 23fd_close(int fd)
a7870688 24{
f1dc9b30 25 fde *fde = &fd_table[fd];
9e4ad609 26 if (fde->type == FD_FILE) {
03eb2f01 27 assert(fde->read_handler == NULL);
28 assert(fde->write_handler == NULL);
9e4ad609 29 }
2db609de 30 fdUpdateBiggest(fd, fde->open = FD_CLOSE);
f1dc9b30 31 memset(fde, '\0', sizeof(fde));
a7870688 32 fde->timeout = 0;
33}
34
35void
36fd_open(int fd, unsigned int type, const char *desc)
37{
f1dc9b30 38 fde *fde = &fd_table[fd];
edd1e84c 39 assert(fde->open == 0);
a7870688 40 fde->type = type;
41 fdUpdateBiggest(fd, fde->open = FD_OPEN);
42 if (desc)
4f92c80c 43 xstrncpy(fde->desc, desc, FD_DESC_SZ);
a7870688 44}
45
46void
47fd_note(int fd, const char *s)
48{
f1dc9b30 49 fde *fde = &fd_table[fd];
a7870688 50 xstrncpy(fde->desc, s, FD_DESC_SZ);
51}
4f92c80c 52
53void
54fd_bytes(int fd, int len, unsigned int type)
55{
f1dc9b30 56 fde *fde = &fd_table[fd];
4f92c80c 57 if (len < 0)
58 return;
365e5b34 59 assert(type == FD_READ || type == FD_WRITE);
4f92c80c 60 if (type == FD_READ)
61 fde->bytes_read += len;
4f92c80c 62 else
03eb2f01 63 fde->bytes_written += len;
4f92c80c 64}
f17936ab 65
66void
67fdFreeMemory(void)
68{
9e4ad609 69 safe_free(fd_table);
70}
71
72void
73fdDumpOpen(void)
74{
75 int i;
f1dc9b30 76 fde *fde;
9e4ad609 77 for (i = 0; i < Squid_MaxFD; i++) {
78 fde = &fd_table[i];
79 if (!fde->open)
80 continue;
81 if (i == fileno(debug_log))
82 continue;
a3d5953d 83 debug(5, 1) ("Open FD %4d %s\n", i, fde->desc);
9e4ad609 84 }
f17936ab 85}