| 174 fds[1].fd = std_err[0]; |
174 fds[1].fd = std_err[0]; |
| 175 fds[1].events = POLLIN; |
175 fds[1].events = POLLIN; |
| 176 |
176 |
| 177 int poll_fails = 0; |
177 int poll_fails = 0; |
| 178 for(;;) { |
178 for(;;) { |
| 179 if(poll(fds, 1, 1000000) < 0) { |
179 if(poll(fds, 2, 1000000) < 0) { |
| 180 if(errno == EINTR) { |
180 if(errno == EINTR) { |
| 181 continue; |
181 continue; |
| 182 } |
182 } |
| 183 log_ereport(LOG_FAILURE, "log thread poll failed: %s", strerror(errno)); |
183 log_ereport(LOG_FAILURE, "log thread poll failed: %s", strerror(errno)); |
| 184 if(poll_fails++ > LOG_THREAD_MAX_POLL_FAILS) { |
184 if(poll_fails++ > LOG_THREAD_MAX_POLL_FAILS) { |
| 194 } |
194 } |
| 195 } |
195 } |
| 196 |
196 |
| 197 // check stderr |
197 // check stderr |
| 198 if(fds[1].revents & POLLIN) { |
198 if(fds[1].revents & POLLIN) { |
| 199 if(log_pipe("stderr", fds[0].fd, log_pipe_stderr_buf, &log_pipe_stderr_tmp_pos)) { |
199 if(log_pipe("stderr", fds[1].fd, log_pipe_stderr_buf, &log_pipe_stderr_tmp_pos)) { |
| 200 log_ereport(LOG_WARN, "log_pipe stderr failed"); |
200 log_ereport(LOG_WARN, "log_pipe stderr failed"); |
| 201 break; |
201 break; |
| 202 } |
202 } |
| 203 } |
203 } |
| 204 } |
204 } |