aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/chelper/serialqueue.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2020-10-30 13:45:28 -0400
committerKevin O'Connor <kevin@koconnor.net>2020-10-30 14:02:12 -0400
commitaaf3dc6ac3e3a38b0dd3508d72594214ede27c5c (patch)
tree3bb193d642ae539b4301e95de3167aaaea817ff4 /klippy/chelper/serialqueue.c
parent19b2363c931b03f1ea2fa17f94bf2458d62d9a77 (diff)
downloadkutter-aaf3dc6ac3e3a38b0dd3508d72594214ede27c5c.tar.gz
kutter-aaf3dc6ac3e3a38b0dd3508d72594214ede27c5c.tar.xz
kutter-aaf3dc6ac3e3a38b0dd3508d72594214ede27c5c.zip
serialqueue: Fix registration of serial fd in debug mode
When in debug output mode, make sure to register the fd correctly. Otherwise, the poll() call will use the 0 fd which could cause random results. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/chelper/serialqueue.c')
-rw-r--r--klippy/chelper/serialqueue.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/klippy/chelper/serialqueue.c b/klippy/chelper/serialqueue.c
index 779156ce..ec6dd014 100644
--- a/klippy/chelper/serialqueue.c
+++ b/klippy/chelper/serialqueue.c
@@ -88,10 +88,11 @@ pollreactor_free(struct pollreactor *pr)
// Add a callback for when a file descriptor (fd) becomes readable
static void
-pollreactor_add_fd(struct pollreactor *pr, int pos, int fd, void *callback)
+pollreactor_add_fd(struct pollreactor *pr, int pos, int fd, void *callback
+ , int write_only)
{
pr->fds[pos].fd = fd;
- pr->fds[pos].events = POLLIN|POLLHUP;
+ pr->fds[pos].events = POLLHUP | (write_only ? 0 : POLLIN);
pr->fds[pos].revents = 0;
pr->fd_callbacks[pos] = callback;
}
@@ -838,9 +839,9 @@ serialqueue_alloc(int serial_fd, int write_only)
if (ret)
goto fail;
pollreactor_setup(&sq->pr, SQPF_NUM, SQPT_NUM, sq);
- if (!write_only)
- pollreactor_add_fd(&sq->pr, SQPF_SERIAL, serial_fd, input_event);
- pollreactor_add_fd(&sq->pr, SQPF_PIPE, sq->pipe_fds[0], kick_event);
+ pollreactor_add_fd(&sq->pr, SQPF_SERIAL, serial_fd, input_event
+ , write_only);
+ pollreactor_add_fd(&sq->pr, SQPF_PIPE, sq->pipe_fds[0], kick_event, 0);
pollreactor_add_timer(&sq->pr, SQPT_RETRANSMIT, retransmit_event);
pollreactor_add_timer(&sq->pr, SQPT_COMMAND, command_event);
set_non_blocking(serial_fd);