diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/igt_kms.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/lib/igt_kms.c b/lib/igt_kms.c index ecc7a799..cc4a1f72 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -3152,14 +3152,20 @@ int igt_display_drop_events(igt_display_t *display) }; while (poll(&pfd, 1, 0) > 0) { - struct drm_event ev; - char buf[128]; - - read(display->drm_fd, &ev, sizeof(ev)); - igt_info("Dropping event type %u length %u\n", ev.type, ev.length); - igt_assert(ev.length <= sizeof(buf)); - read(display->drm_fd, buf, ev.length); - ret++; + struct drm_event *ev; + char buf[4096]; + ssize_t retval; + + retval = read(display->drm_fd, &buf, sizeof(buf)); + igt_assert_lt(0, retval); + + for (int i = 0; i < retval; i += ev->length) { + ev = (struct drm_event *)&buf[i]; + + igt_info("Dropping event type %u length %u\n", ev->type, ev->length); + igt_assert(ev->length + i <= sizeof(buf)); + ret++; + } } return ret; |
