projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: test: use BABELTRACE_BIN instead of babeltrace
[lttng-tools.git]
/
tests
/
regression
/
kernel
/
select_poll_epoll.c
diff --git
a/tests/regression/kernel/select_poll_epoll.c
b/tests/regression/kernel/select_poll_epoll.c
index 33b8cb5d5d100d29ac18777ba68ae996e1ced057..d0d7e4aeafae124566b73157c2565a4aef4a1bcb 100644
(file)
--- a/
tests/regression/kernel/select_poll_epoll.c
+++ b/
tests/regression/kernel/select_poll_epoll.c
@@
-46,6
+46,7
@@
struct ppoll_thread_data {
int value;
};
int value;
};
+static
void test_select_big(void)
{
fd_set rfds, wfds, exfds;
void test_select_big(void)
{
fd_set rfds, wfds, exfds;
@@
-95,6
+96,7
@@
end:
return;
}
return;
}
+static
void test_pselect(void)
{
fd_set rfds;
void test_pselect(void)
{
fd_set rfds;
@@
-128,6
+130,7
@@
void test_pselect(void)
}
}
+static
void test_select(void)
{
fd_set rfds;
void test_select(void)
{
fd_set rfds;
@@
-161,6
+164,7
@@
void test_select(void)
}
}
+static
void test_poll(void)
{
struct pollfd ufds[NB_FD];
void test_poll(void)
{
struct pollfd ufds[NB_FD];
@@
-185,6
+189,7
@@
void test_poll(void)
}
}
}
}
+static
void test_ppoll(void)
{
struct pollfd ufds[NB_FD];
void test_ppoll(void)
{
struct pollfd ufds[NB_FD];
@@
-217,6
+222,7
@@
void test_ppoll(void)
}
}
}
}
+static
void test_ppoll_big(void)
{
struct pollfd ufds[MAX_FDS];
void test_ppoll_big(void)
{
struct pollfd ufds[MAX_FDS];
@@
-256,6
+262,7
@@
void test_ppoll_big(void)
return;
}
return;
}
+static
void test_epoll(void)
{
int ret, epollfd;
void test_epoll(void)
{
int ret, epollfd;
@@
-273,7
+280,7
@@
void test_epoll(void)
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, wait_fd, &epoll_event);
if (ret < 0) {
perror("[epoll] add");
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, wait_fd, &epoll_event);
if (ret < 0) {
perror("[epoll] add");
- goto e
nd
;
+ goto e
rror
;
}
if (timeout > 0) {
}
if (timeout > 0) {
@@
-294,10
+301,16
@@
void test_epoll(void)
perror("epoll_wait");
}
perror("epoll_wait");
}
+error:
+ ret = close(epollfd);
+ if (ret) {
+ perror("close");
+ }
end:
return;
}
end:
return;
}
+static
void test_pepoll(void)
{
int ret, epollfd;
void test_pepoll(void)
{
int ret, epollfd;
@@
-315,7
+328,7
@@
void test_pepoll(void)
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, wait_fd, &epoll_event);
if (ret < 0) {
perror("[eppoll] add");
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, wait_fd, &epoll_event);
if (ret < 0) {
perror("[eppoll] add");
- goto e
nd
;
+ goto e
rror
;
}
if (timeout > 0) {
}
if (timeout > 0) {
@@
-336,10
+349,16
@@
void test_pepoll(void)
perror("epoll_pwait");
}
perror("epoll_pwait");
}
+error:
+ ret = close(epollfd);
+ if (ret) {
+ perror("close");
+ }
end:
return;
}
end:
return;
}
+static
void run_working_cases(void)
{
int ret;
void run_working_cases(void)
{
int ret;
@@
-386,6
+405,7
@@
end:
* segfault (eventually with a "*** stack smashing detected ***" message).
* The event should contain an array of 100 FDs filled with garbage.
*/
* segfault (eventually with a "*** stack smashing detected ***" message).
* The event should contain an array of 100 FDs filled with garbage.
*/
+static
void ppoll_fds_buffer_overflow(void)
{
struct pollfd ufds[NB_FD];
void ppoll_fds_buffer_overflow(void)
{
struct pollfd ufds[NB_FD];
@@
-417,6
+437,7
@@
void ppoll_fds_buffer_overflow(void)
* cleanly fail with a "Invalid argument".
* The event should contain an empty array of FDs and overflow = 1.
*/
* cleanly fail with a "Invalid argument".
* The event should contain an empty array of FDs and overflow = 1.
*/
+static
void ppoll_fds_ulong_max(void)
{
struct pollfd ufds[NB_FD];
void ppoll_fds_ulong_max(void)
{
struct pollfd ufds[NB_FD];
@@
-447,6
+468,7
@@
void ppoll_fds_ulong_max(void)
* Pass an invalid file descriptor to pselect6(). The syscall should return
* -EBADF. The recorded event should contain a "ret = -EBADF (-9)".
*/
* Pass an invalid file descriptor to pselect6(). The syscall should return
* -EBADF. The recorded event should contain a "ret = -EBADF (-9)".
*/
+static
void pselect_invalid_fd(void)
{
fd_set rfds;
void pselect_invalid_fd(void)
{
fd_set rfds;
@@
-493,6
+515,7
@@
error:
* Invalid pointer as writefds, should output a ppoll event
* with 0 FDs.
*/
* Invalid pointer as writefds, should output a ppoll event
* with 0 FDs.
*/
+static
void pselect_invalid_pointer(void)
{
fd_set rfds;
void pselect_invalid_pointer(void)
{
fd_set rfds;
@@
-524,6
+547,7
@@
void pselect_invalid_pointer(void)
* Pass an invalid pointer to epoll_pwait, should fail with
* "Bad address", the event returns 0 FDs.
*/
* Pass an invalid pointer to epoll_pwait, should fail with
* "Bad address", the event returns 0 FDs.
*/
+static
void epoll_pwait_invalid_pointer(void)
{
int ret, epollfd;
void epoll_pwait_invalid_pointer(void)
{
int ret, epollfd;
@@
-542,7
+566,7
@@
void epoll_pwait_invalid_pointer(void)
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, wait_fd, &epoll_event);
if (ret < 0) {
perror("[eppoll] add");
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, wait_fd, &epoll_event);
if (ret < 0) {
perror("[eppoll] add");
- goto e
nd
;
+ goto e
rror
;
}
ret = syscall(SYS_epoll_pwait, epollfd,
}
ret = syscall(SYS_epoll_pwait, epollfd,
@@
-560,6
+584,11
@@
void epoll_pwait_invalid_pointer(void)
perror("# epoll_pwait");
}
perror("# epoll_pwait");
}
+error:
+ ret = close(epollfd);
+ if (ret) {
+ perror("close");
+ }
end:
return;
}
end:
return;
}
@@
-568,6
+597,7
@@
end:
* Set maxevents to INT_MAX, should output "Invalid argument"
* The event should return an empty array.
*/
* Set maxevents to INT_MAX, should output "Invalid argument"
* The event should return an empty array.
*/
+static
void epoll_pwait_int_max(void)
{
int ret, epollfd;
void epoll_pwait_int_max(void)
{
int ret, epollfd;
@@
-585,7
+615,7
@@
void epoll_pwait_int_max(void)
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, wait_fd, &epoll_event);
if (ret < 0) {
perror("[eppoll] add");
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, wait_fd, &epoll_event);
if (ret < 0) {
perror("[eppoll] add");
- goto e
nd
;
+ goto e
rror
;
}
ret = syscall(SYS_epoll_pwait, epollfd, &epoll_event, INT_MAX, -1,
}
ret = syscall(SYS_epoll_pwait, epollfd, &epoll_event, INT_MAX, -1,
@@
-603,10
+633,16
@@
void epoll_pwait_int_max(void)
perror("# epoll_pwait");
}
perror("# epoll_pwait");
}
+error:
+ ret = close(epollfd);
+ if (ret) {
+ perror("close");
+ }
end:
return;
}
end:
return;
}
+static
void *ppoll_writer(void *arg)
{
struct ppoll_thread_data *data = (struct ppoll_thread_data *) arg;
void *ppoll_writer(void *arg)
{
struct ppoll_thread_data *data = (struct ppoll_thread_data *) arg;
@@
-620,6
+656,7
@@
void *ppoll_writer(void *arg)
return NULL;
}
return NULL;
}
+static
void do_ppoll(int *fds, struct pollfd *ufds)
{
int i, ret;
void do_ppoll(int *fds, struct pollfd *ufds)
{
int i, ret;
@@
-649,6
+686,7
@@
void do_ppoll(int *fds, struct pollfd *ufds)
}
}
}
}
+static
void stress_ppoll(int *fds, int value)
{
pthread_t writer;
void stress_ppoll(int *fds, int value)
{
pthread_t writer;
@@
-690,6
+728,7
@@
end:
*
* ppoll should work as expected and the trace should be readable at the end.
*/
*
* ppoll should work as expected and the trace should be readable at the end.
*/
+static
void ppoll_concurrent_write(void)
{
int i, ret, fds[MAX_FDS];
void ppoll_concurrent_write(void)
{
int i, ret, fds[MAX_FDS];
@@
-715,6
+754,7
@@
void ppoll_concurrent_write(void)
return;
}
return;
}
+static
void *epoll_pwait_writer(void *addr)
{
srand(time(NULL));
void *epoll_pwait_writer(void *addr)
{
srand(time(NULL));
@@
-732,6
+772,7
@@
void *epoll_pwait_writer(void *addr)
* buffer allocated for the returned data. This should randomly segfault.
* The trace should be readable and no kernel OOPS should occur.
*/
* buffer allocated for the returned data. This should randomly segfault.
* The trace should be readable and no kernel OOPS should occur.
*/
+static
void epoll_pwait_concurrent_munmap(void)
{
int ret, epollfd, i, fds[MAX_FDS];
void epoll_pwait_concurrent_munmap(void)
{
int ret, epollfd, i, fds[MAX_FDS];
@@
-753,7
+794,7
@@
void epoll_pwait_concurrent_munmap(void)
-1, 0);
if (epoll_event == MAP_FAILED) {
perror("mmap");
-1, 0);
if (epoll_event == MAP_FAILED) {
perror("mmap");
- goto e
nd
;
+ goto e
rror
;
}
for (i = 0; i < MAX_FDS; i++) {
}
for (i = 0; i < MAX_FDS; i++) {
@@
-766,7
+807,7
@@
void epoll_pwait_concurrent_munmap(void)
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, fds[i], epoll_event);
if (ret < 0) {
perror("[eppoll] add");
ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, fds[i], epoll_event);
if (ret < 0) {
perror("[eppoll] add");
- goto e
nd
_unmap;
+ goto e
rror
_unmap;
}
}
stop_thread = 0;
}
}
stop_thread = 0;
@@
-774,7
+815,7
@@
void epoll_pwait_concurrent_munmap(void)
(void *) epoll_event);
if (ret != 0) {
fprintf(stderr, "[error] pthread_create\n");
(void *) epoll_event);
if (ret != 0) {
fprintf(stderr, "[error] pthread_create\n");
- goto e
nd
_unmap;
+ goto e
rror
_unmap;
}
ret = epoll_pwait(epollfd, epoll_event, 1, 1, NULL);
}
ret = epoll_pwait(epollfd, epoll_event, 1, 1, NULL);
@@
-795,9
+836,9
@@
void epoll_pwait_concurrent_munmap(void)
ret = pthread_join(writer, NULL);
if (ret) {
fprintf(stderr, "[error] pthread_join\n");
ret = pthread_join(writer, NULL);
if (ret) {
fprintf(stderr, "[error] pthread_join\n");
- goto e
nd
_unmap;
+ goto e
rror
_unmap;
}
}
-e
nd
_unmap:
+e
rror
_unmap:
for (i = 0; i < MAX_FDS; i++) {
ret = close(fds[i]);
if (ret != 0) {
for (i = 0; i < MAX_FDS; i++) {
ret = close(fds[i]);
if (ret != 0) {
@@
-810,19
+851,16
@@
end_unmap:
perror("munmap");
}
perror("munmap");
}
+error:
+ ret = close(epollfd);
+ if (ret) {
+ perror("close");
+ }
end:
return;
}
end:
return;
}
-void usage(poptContext optCon, int exitcode, char *error, char *addl)
-{
- poptPrintUsage(optCon, stderr, 0);
- if (error) {
- fprintf(stderr, "%s: %s\n", error, addl);
- }
- exit(exitcode);
-}
-
+static
void print_list(void)
{
fprintf(stderr, "Test list (-t X):\n");
void print_list(void)
{
fprintf(stderr, "Test list (-t X):\n");
This page took
0.030521 seconds
and
4
git commands to generate.