diff --git a/fuzzers/common.h b/fuzzers/common.h index 33a8424862..f3160b957c 100644 --- a/fuzzers/common.h +++ b/fuzzers/common.h @@ -52,19 +52,29 @@ static inline bool str_startswith(const char *str, size_t str_len, #define PLAYBACK_TIME_LIMIT 5 #endif +#ifndef EVENTS_LIMIT +#define EVENTS_LIMIT 10 +#endif + static inline void player_loop(mpv_handle *ctx) { bool playing = false; bool loaded = false; int timeout = -1; + int events_limit_after_restart = EVENTS_LIMIT; while (1) { mpv_event *event = mpv_wait_event(ctx, timeout); + // If some events are spamming, like audio-reconfig preventing our + // timeout to trigger stop after N events. + if (timeout == PLAYBACK_TIME_LIMIT && events_limit_after_restart-- < 0) + break; if (timeout == PLAYBACK_TIME_LIMIT && event->event_id == MPV_EVENT_NONE) break; if (event->event_id == MPV_EVENT_START_FILE) loaded = playing = true; if (event->event_id == MPV_EVENT_END_FILE) { playing = false; + events_limit_after_restart = EVENTS_LIMIT; timeout = -1; } if (playing && event->event_id == MPV_EVENT_PLAYBACK_RESTART)