]>
Commit | Line | Data |
---|---|---|
a7870688 | 1 | #include "squid.h" |
2 | ||
3 | static void fdUpdateBiggest _PARAMS((int fd, unsigned int status)); | |
4 | ||
5 | static void | |
6 | fdUpdateBiggest(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 | ||
22 | void | |
4f92c80c | 23 | fd_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 | ||
35 | void | |
36 | fd_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 | ||
46 | void | |
47 | fd_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 | |
53 | void | |
54 | fd_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 | |
66 | void | |
67 | fdFreeMemory(void) | |
68 | { | |
9e4ad609 | 69 | safe_free(fd_table); |
70 | } | |
71 | ||
72 | void | |
73 | fdDumpOpen(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 | } |