update_personality(tcp, tcp->currpers);
#endif
res = (get_regs_error ? -1 : get_syscall_result(tcp));
- if (res == 1) {
- if (filtered(tcp) || hide_log_until_execve)
- goto ret;
- }
+ if (filtered(tcp) || hide_log_until_execve)
+ goto ret;
if (cflag) {
count_syscall(tcp, &tv);
check_PROGRAMS = \
caps \
fanotify_mark \
+ filter-unavailable \
getrandom \
inet-accept-connect-send-recv \
ioctl \
umovestr2 \
unix-pair-send-recv
+filter_unavailable_LDFLAGS = -pthread
mmap64_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64
pc_LDADD = $(dl_LIBS)
stat_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64
caps.test \
dumpio.test \
fanotify_mark.test \
+ filter-unavailable.test \
getdents.test \
getrandom.test \
ioctl.test \
caps.awk \
dumpio.expected \
fanotify_mark.expected \
+ filter-unavailable.expected \
getdents.awk \
getdents.out \
getrandom.awk \
--- /dev/null
+#include <assert.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <sys/wait.h>
+
+#define P 16
+#define T 7
+
+static void *
+thread(void *arg)
+{
+ assert(write(1, "", 1) == 1);
+ pause();
+ return arg;
+}
+
+static int
+process(void)
+{
+ int i;
+ int fds[2];
+ pthread_t t;
+ struct timespec ts = { .tv_nsec = 10000000 };
+
+ (void) close(0);
+ (void) close(1);
+ assert(pipe(fds) == 0 && fds[0] == 0 && fds[1] == 1);
+
+ for (i = 0; i < T; ++i)
+ assert(pthread_create(&t, NULL, thread, NULL) == 0);
+ for (i = 0; i < T; ++i)
+ assert(read(0, fds, 1) == 1);
+
+ (void) nanosleep(&ts, 0);
+ return 0;
+}
+
+int
+main(void)
+{
+ int i, s;
+ pid_t p;
+
+ for (i = 0; i < P; ++i) {
+ assert((p = fork()) >= 0);
+ if (p == 0)
+ return process();
+ assert(waitpid(p, &s, 0) == p && WIFEXITED(s));
+ if (WEXITSTATUS(s))
+ return WEXITSTATUS(s);
+ }
+ return 0;
+}