diff options
author | Imre Deak <imre.deak@intel.com> | 2021-09-07 04:58:07 +0300 |
---|---|---|
committer | Imre Deak <imre.deak@intel.com> | 2021-09-13 13:42:55 +0300 |
commit | 688bcc839933df04897a702a3ab81b4c74340793 (patch) | |
tree | f22f3010120e6b6987e8ea0bb8acc53b081fe658 | |
parent | 64452a46b57ca4ef35eb65a547df8ed1b131e8f0 (diff) |
tests/kms_ccs: Make sure to free GEM and FB objects
At the moment we're leaking the GEM and FB objects that could lead to
OOM if multiple subtests are run (vs. each subtest in a separate test
run).
v2:
- Free things before calling igt_assert(), as this jumps to the next
subtest if the check fails. (Juha-Pekka)
v3:
- Remove FBs only after collecting CRCs.
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
-rw-r--r-- | tests/kms_ccs.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c index 586680ae1..241b220f4 100644 --- a/tests/kms_ccs.c +++ b/tests/kms_ccs.c @@ -343,8 +343,14 @@ static void generate_fb(data_t *data, struct igt_fb *fb, ret = drmIoctl(data->drm_fd, DRM_IOCTL_MODE_ADDFB2, &f); if (data->flags & TEST_FAIL_ON_ADDFB2) { + int addfb_errno = errno; + + if (f.handles[index]) + gem_close(data->drm_fd, f.handles[index]); + igt_assert_eq(ret, -1); - igt_assert_eq(errno, EINVAL); + igt_assert_eq(addfb_errno, EINVAL); + return; } else igt_assert_eq(ret, 0); @@ -387,7 +393,8 @@ static bool try_config(data_t *data, enum test_fb_flags fb_flags, drmModeModeInfo *drm_mode = igt_output_get_mode(data->output); int fb_width = drm_mode->hdisplay; enum igt_commit_style commit; - struct igt_fb fb, fb_sprite; + struct igt_fb fb = {}; + struct igt_fb fb_sprite = {}; int ret; if (data->display.is_atomic) @@ -443,14 +450,9 @@ static bool try_config(data_t *data, enum test_fb_flags fb_flags, igt_plane_set_rotation(primary, IGT_ROTATION_90); ret = igt_display_try_commit2(display, commit); - if (data->flags & TEST_BAD_ROTATION_90) { - igt_assert_eq(ret, -EINVAL); - } else { - igt_assert_eq(ret, 0); - if (crc) - igt_pipe_crc_collect_crc(data->pipe_crc, crc); - } + if (ret == 0 && !(fb_flags & TEST_BAD_ROTATION_90) && crc) + igt_pipe_crc_collect_crc(data->pipe_crc, crc); igt_debug_wait_for_keypress("ccs"); @@ -458,15 +460,16 @@ static bool try_config(data_t *data, enum test_fb_flags fb_flags, igt_plane_set_position(data->plane, 0, 0); igt_plane_set_size(data->plane, 0, 0); igt_plane_set_fb(data->plane, NULL); - igt_remove_fb(display->drm_fd, &fb_sprite); } igt_plane_set_fb(primary, NULL); igt_plane_set_rotation(primary, IGT_ROTATION_0); igt_display_commit2(display, commit); - if (data->flags & TEST_CRC) - igt_remove_fb(data->drm_fd, &fb); + igt_remove_fb(data->drm_fd, &fb_sprite); + igt_remove_fb(data->drm_fd, &fb); + + igt_assert_eq(ret, data->flags & TEST_BAD_ROTATION_90 ? -EINVAL : 0); return true; } |