summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/drmtest.c43
-rw-r--r--lib/drmtest.h3
-rw-r--r--tests/gem_stress.c32
3 files changed, 48 insertions, 30 deletions
diff --git a/lib/drmtest.c b/lib/drmtest.c
index f3f05347..bfb36a86 100644
--- a/lib/drmtest.c
+++ b/lib/drmtest.c
@@ -31,6 +31,8 @@
#include <sys/ioctl.h>
#include <string.h>
#include <sys/mman.h>
+#include <signal.h>
+
#include "drmtest.h"
#include "i915_drm.h"
#include "intel_chipset.h"
@@ -219,3 +221,44 @@ void *gem_mmap(int fd, uint32_t handle, int size, int prot)
return ptr;
}
+static pid_t signal_helper = -1;
+long long int sig_stat;
+static void signal_helper_process(pid_t pid)
+{
+ /* Interrupt the parent process at 500Hz, just to be annoying */
+ while (1) {
+ usleep(1000 * 1000 / 500);
+ if (kill(pid, SIGUSR1)) /* Parent has died, so must we. */
+ exit(0);
+ }
+}
+
+static void sig_handler(int i)
+{
+ sig_stat++;
+}
+
+void drmtest_fork_signal_helper(void)
+{
+ pid_t pid;
+
+ signal(SIGUSR1, sig_handler);
+ pid = fork();
+ if (pid == 0) {
+ signal_helper_process(getppid());
+ return;
+ }
+
+ signal_helper = pid;
+}
+
+void drmtest_stop_signal_helper(void)
+{
+ if (signal_helper != -1)
+ kill(signal_helper, SIGQUIT);
+
+ if (sig_stat)
+ fprintf(stderr, "signal handler called %llu times\n", sig_stat);
+
+ signal_helper = -1;
+}
diff --git a/lib/drmtest.h b/lib/drmtest.h
index 38118f17..a10a0521 100644
--- a/lib/drmtest.h
+++ b/lib/drmtest.h
@@ -46,3 +46,6 @@ void gem_set_domain(int fd, uint32_t handle,
void gem_sync(int fd, uint32_t handle);
uint32_t gem_create(int fd, int size);
void *gem_mmap(int fd, uint32_t handle, int size, int prot);
+
+void drmtest_fork_signal_helper(void);
+void drmtest_stop_signal_helper(void);
diff --git a/tests/gem_stress.c b/tests/gem_stress.c
index f72bd13f..44fcfbaa 100644
--- a/tests/gem_stress.c
+++ b/tests/gem_stress.c
@@ -51,8 +51,6 @@
#include "gem_stress.h"
-#include <signal.h>
-
#define CMD_POLY_STIPPLE_OFFSET 0x7906
/** TODO:
@@ -102,29 +100,6 @@ struct {
unsigned max_failed_reads;
} stats;
-static void signal_helper_process(pid_t pid)
-{
- /* Interrupt the parent process at 500Hz, just to be annoying */
- while (1) {
- usleep(1000 * 1000 / 500);
- if (kill(pid, SIGUSR1)) /* Parent has died, so must we. */
- exit(0);
- }
-}
-
-static pid_t fork_signal_helper(void)
-{
- pid_t pid;
-
- pid = fork();
- if (pid == 0) {
- signal_helper_process(getppid());
- return -1;
- }
-
- return pid;
-}
-
static void tile2xy(struct scratch_buf *buf, unsigned tile, unsigned *x, unsigned *y)
{
assert(tile < buf->num_tiles);
@@ -883,7 +858,6 @@ int main(int argc, char **argv)
{
int i, j;
unsigned *current_permutation, *tmp_permutation;
- pid_t signal_helper = -1;
drm_fd = drm_open_any();
devid = intel_get_drm_devid(drm_fd);
@@ -891,9 +865,8 @@ int main(int argc, char **argv)
parse_options(argc, argv);
/* start our little helper early before too may allocations occur */
- signal(SIGUSR1, SIG_IGN);
if (options.use_signal_helper)
- signal_helper = fork_signal_helper();
+ drmtest_fork_signal_helper();
init();
@@ -943,8 +916,7 @@ int main(int argc, char **argv)
close(drm_fd);
- if (signal_helper != -1)
- kill(signal_helper, SIGQUIT);
+ drmtest_stop_signal_helper();
return 0;
}