diff options
Diffstat (limited to 'networking/udhcp/signalpipe.c')
-rw-r--r-- | networking/udhcp/signalpipe.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/networking/udhcp/signalpipe.c b/networking/udhcp/signalpipe.c index b101b4ce4..2ff78f0f2 100644 --- a/networking/udhcp/signalpipe.c +++ b/networking/udhcp/signalpipe.c | |||
@@ -40,6 +40,7 @@ void FAST_FUNC udhcp_sp_setup(void) | |||
40 | xpiped_pair(signal_pipe); | 40 | xpiped_pair(signal_pipe); |
41 | close_on_exec_on(signal_pipe.rd); | 41 | close_on_exec_on(signal_pipe.rd); |
42 | close_on_exec_on(signal_pipe.wr); | 42 | close_on_exec_on(signal_pipe.wr); |
43 | ndelay_on(signal_pipe.rd); | ||
43 | ndelay_on(signal_pipe.wr); | 44 | ndelay_on(signal_pipe.wr); |
44 | bb_signals(0 | 45 | bb_signals(0 |
45 | + (1 << SIGUSR1) | 46 | + (1 << SIGUSR1) |
@@ -61,20 +62,20 @@ void FAST_FUNC udhcp_sp_fd_set(struct pollfd pfds[2], int extra_fd) | |||
61 | pfds[1].fd = extra_fd; | 62 | pfds[1].fd = extra_fd; |
62 | pfds[1].events = POLLIN; | 63 | pfds[1].events = POLLIN; |
63 | } | 64 | } |
65 | /* this simplifies "is extra_fd ready?" tests elsewhere: */ | ||
66 | pfds[1].revents = 0; | ||
64 | } | 67 | } |
65 | 68 | ||
66 | /* Read a signal from the signal pipe. Returns 0 if there is | 69 | /* Read a signal from the signal pipe. Returns 0 if there is |
67 | * no signal, -1 on error (and sets errno appropriately), and | 70 | * no signal, -1 on error (and sets errno appropriately), and |
68 | * your signal on success */ | 71 | * your signal on success */ |
69 | int FAST_FUNC udhcp_sp_read(struct pollfd pfds[2]) | 72 | int FAST_FUNC udhcp_sp_read(void) |
70 | { | 73 | { |
71 | unsigned char sig; | 74 | unsigned char sig; |
72 | 75 | ||
73 | if (!pfds[0].revents) | 76 | /* Can't block here, fd is in nonblocking mode */ |
74 | return 0; | ||
75 | |||
76 | if (safe_read(signal_pipe.rd, &sig, 1) != 1) | 77 | if (safe_read(signal_pipe.rd, &sig, 1) != 1) |
77 | return -1; | 78 | return 0; |
78 | 79 | ||
79 | return sig; | 80 | return sig; |
80 | } | 81 | } |