Skip to content

Commit 69f0873

Browse files
committed
CA-380565: return ETIMEDOUT when -t timeout is hit in IPC select
Signed-off-by: Mark Syms <[email protected]>
1 parent d3c4fa7 commit 69f0873

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

control/tap-ctl-ipc.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,26 +61,34 @@ tap_ctl_read_raw(int fd, void *buf, size_t size, struct timeval *timeout)
6161
fd_set readfds;
6262
size_t offset = 0;
6363
int ret;
64+
int err = 0;
6465

66+
FD_ZERO(&readfds);
6567
while (offset < size) {
66-
FD_ZERO(&readfds);
6768
FD_SET(fd, &readfds);
6869

6970
eintr_retry(ret, select(fd + 1, &readfds, NULL, NULL, timeout))
70-
if (ret == -1)
71+
if (ret == -1) {
72+
err = errno;
7173
break;
72-
else if (FD_ISSET(fd, &readfds)) {
74+
} else if (FD_ISSET(fd, &readfds)) {
7375
eintr_retry(ret, read(fd, buf + offset, size - offset))
74-
if (ret <= 0)
76+
if (ret <= 0) {
77+
err = errno;
7578
break;
79+
}
7680
offset += ret;
77-
} else
81+
} else {
82+
/* 0 return - timed out */
83+
err = ETIMEDOUT;
7884
break;
85+
}
86+
7987
}
8088

8189
if (offset != size) {
8290
EPRINTF("failure reading data %zd/%zd\n", offset, size);
83-
return -EIO;
91+
return err ? - err : -EIO;
8492
}
8593

8694
return 0;

mockatests/control/test-tap-ctl-close.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ void test_tap_ctl_close_read_select_timeout(void **state)
403403

404404
read_timeout.tv_sec = 30;
405405
read_timeout.tv_usec = 0;
406-
read_select_params.result = 1;
406+
read_select_params.result = 0;
407407
expect_memory(__wrap_select, timeout, &read_timeout, sizeof(read_timeout));
408408
will_return(__wrap_select, &read_select_params);
409409

@@ -413,7 +413,7 @@ void test_tap_ctl_close_read_select_timeout(void **state)
413413
/* Call test API */
414414
result = tap_ctl_close(test_pid, test_minor, 0, &write_timeout);
415415

416-
assert_int_equal(-EIO, result);
416+
assert_int_equal(-ETIMEDOUT, result);
417417
}
418418

419419
void test_tap_ctl_close_error_response(void **state)

0 commit comments

Comments
 (0)