diff --git a/src/tests/system/kernel/Jamfile b/src/tests/system/kernel/Jamfile index fa6e3f58eb..c8530c8910 100644 --- a/src/tests/system/kernel/Jamfile +++ b/src/tests/system/kernel/Jamfile @@ -29,17 +29,20 @@ SimpleTest port_wakeup_test_7 : port_wakeup_test_7.cpp ; SimpleTest port_wakeup_test_8 : port_wakeup_test_8.cpp ; SimpleTest port_wakeup_test_9 : port_wakeup_test_9.cpp ; +SimpleTest select_check : select_check.cpp ; +SimpleTest select_close_test : select_close_test.cpp ; + SimpleTest syscall_time : syscall_time.cpp ; SimpleTest transfer_area_test : transfer_area_test.cpp ; -SimpleTest yield_test : yield_test.cpp ; - SimpleTest wait_test_1 : wait_test_1.c ; SimpleTest wait_test_2 : wait_test_2.cpp ; SimpleTest wait_test_3 : wait_test_3.cpp ; SimpleTest wait_test_4 : wait_test_4.cpp ; +SimpleTest yield_test : yield_test.cpp ; + SetSupportedPlatformsForTarget sigint_bug113_test : $(HAIKU_BEOS_COMPATIBLE_PLATFORMS) ; SimpleTest sigint_bug113_test : sigint_bug113_test.cpp ; diff --git a/src/tests/system/kernel/select_check.cpp b/src/tests/system/kernel/select_check.cpp new file mode 100644 index 0000000000..91036e4a19 --- /dev/null +++ b/src/tests/system/kernel/select_check.cpp @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include +#include + + +int +main(int argc, const char* const* argv) +{ + const char* config[] = { + argc >= 2 ? argv[1] : "rwe", + argc >= 3 ? argv[2] : "rwe", + argc >= 4 ? argv[3] : "rwe" + }; + + fd_set readSet; + fd_set writeSet; + fd_set errorSet; + + FD_ZERO(&readSet); + FD_ZERO(&writeSet); + FD_ZERO(&errorSet); + + for (int fd = 0; fd < 3; fd++) { + if (strchr(config[fd], 'r')) + FD_SET(fd, &readSet); + if (strchr(config[fd], 'w')) + FD_SET(fd, &writeSet); + if (strchr(config[fd], 'e')) + FD_SET(fd, &errorSet); + } + + int result = select(3, &readSet, &writeSet, &errorSet, NULL); + fprintf(stderr, "select(): %d\n", result); + + for (int fd = 0; fd < 3; fd++) { + fprintf(stderr, "fd %d: %s%s%s\n", fd, + FD_ISSET(fd, &readSet) ? "r" : " ", + FD_ISSET(fd, &writeSet) ? "w" : " ", + FD_ISSET(fd, &errorSet) ? "e" : " "); + } + + return 0; +} diff --git a/src/tests/system/kernel/select_close_test.cpp b/src/tests/system/kernel/select_close_test.cpp new file mode 100644 index 0000000000..422a507fbb --- /dev/null +++ b/src/tests/system/kernel/select_close_test.cpp @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include +#include + +#include + + +static status_t +close_fd(void* data) +{ + int fd = int(data); + snooze(1000000); + close(fd); + fprintf(stderr, "fd %d closed\n", fd); + return B_OK; +} + + +int +main() +{ + int fd = dup(0); + + thread_id thread = spawn_thread(close_fd, "close fd", B_NORMAL_PRIORITY, + (void*)fd); + resume_thread(thread); + + fd_set readSet; + FD_ZERO(&readSet); + FD_SET(0, &readSet); + FD_SET(fd, &readSet); + + fprintf(stderr, "select({0, %d}, NULL, NULL, NULL) ...\n", fd); + int result = select(fd + 1, &readSet, NULL, NULL, NULL); + fprintf(stderr, "select(): %d\n", result); + + fprintf(stderr, "fd %d: %s\n", 0, FD_ISSET(0, &readSet) ? "r" : " "); + fprintf(stderr, "fd %d: %s\n", fd, FD_ISSET(fd, &readSet) ? "r" : " "); + + return 0; +}