summaryrefslogtreecommitdiff
path: root/tests/gem_flink.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gem_flink.c')
-rw-r--r--tests/gem_flink.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/gem_flink.c b/tests/gem_flink.c
index 885cdd42..137d8822 100644
--- a/tests/gem_flink.c
+++ b/tests/gem_flink.c
@@ -115,6 +115,41 @@ test_bad_open(int fd)
assert(ret == -1 && errno == ENOENT);
}
+static void
+test_flink_lifetime(int fd)
+{
+ struct drm_i915_gem_create create;
+ struct drm_gem_flink flink;
+ struct drm_gem_open gem_open;
+ int ret, fd2;
+
+ printf("Testing flink lifetime.\n");
+
+ fd2 = drm_open_any();
+
+ memset(&create, 0, sizeof(create));
+ create.size = 16 * 1024;
+ ret = ioctl(fd2, DRM_IOCTL_I915_GEM_CREATE, &create);
+ assert(ret == 0);
+
+ flink.handle = create.handle;
+ ret = ioctl(fd2, DRM_IOCTL_GEM_FLINK, &flink);
+ assert(ret == 0);
+
+ gem_open.name = flink.name;
+ ret = ioctl(fd, DRM_IOCTL_GEM_OPEN, &gem_open);
+ assert(ret == 0);
+ assert(gem_open.handle != 0);
+
+ close(fd2);
+ fd2 = drm_open_any();
+
+ gem_open.name = flink.name;
+ ret = ioctl(fd2, DRM_IOCTL_GEM_OPEN, &gem_open);
+ assert(ret == 0);
+ assert(gem_open.handle != 0);
+}
+
int main(int argc, char **argv)
{
int fd;
@@ -131,6 +166,8 @@ int main(int argc, char **argv)
test_bad_flink(fd);
if (drmtest_run_subtest("bad-open"))
test_bad_open(fd);
+ if (drmtest_run_subtest("flink-lifetime"))
+ test_bad_open(fd);
return 0;
}