summaryrefslogtreecommitdiff
path: root/tests/sw_sync.c
diff options
context:
space:
mode:
authorRobert Foss <robert.foss@collabora.com>2016-12-07 15:07:53 -0500
committerTomeu Vizoso <tomeu.vizoso@collabora.com>2016-12-14 09:24:11 +0100
commit51720a7c00c9621430135c695eb9d85668d1ace1 (patch)
tree77935739cf867d43ac8c7cd309b0037aeeb35c7d /tests/sw_sync.c
parent5a2c2f80947c94cfc4a829eaeb9175274a2a16ee (diff)
tests/sw_sync: Add subtest test_sync_busy_fork
Add subtest test_sync_busy_fork which increments the timeline in a forked child process. Signed-off-by: Robert Foss <robert.foss@collabora.com> Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Diffstat (limited to 'tests/sw_sync.c')
-rw-r--r--tests/sw_sync.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/sw_sync.c b/tests/sw_sync.c
index 44ddab78..453ba5ea 100644
--- a/tests/sw_sync.c
+++ b/tests/sw_sync.c
@@ -172,6 +172,42 @@ static void test_sync_busy(void)
close(timeline);
}
+static void test_sync_busy_fork(void)
+{
+ int fence, ret;
+ int timeline;
+ int skip = 0;
+
+ timeline = sw_sync_timeline_create();
+ fence = sw_sync_fence_create(timeline, 1);
+
+ switch (fork()) {
+ case 0:
+ /* Child process */
+ usleep(1*1000*1000);
+ /* Advance timeline from 0 -> 1 */
+ sw_sync_timeline_inc(timeline, 1);
+ _Exit(0);
+ break;
+ case -1:
+ /* Failed fork */
+ skip = 1;
+ break;
+ default:
+ /* Parent process */
+ ret = sync_wait(fence, 0);
+ igt_assert_f(ret == -1 && errno == ETIME, "Fence signaled (it should not have been signalled yet)\n");
+
+ ret = sync_wait(fence, 2*1000);
+ igt_assert_f(ret == 0, "Fence not signaled (timeline value 1 fence seqno 1)\n");
+ break;
+ }
+
+ close(fence);
+ close(timeline);
+ igt_require(!skip);
+}
+
static void test_sync_merge_invalid(void)
{
int in_fence;
@@ -784,6 +820,9 @@ igt_main
igt_subtest("sync_busy")
test_sync_busy();
+ igt_subtest("sync_busy_fork")
+ test_sync_busy_fork();
+
igt_subtest("sync_merge_invalid")
test_sync_merge_invalid();