mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 16:33:02 +00:00
client API: send MPV_EVENT_SHUTDOWN only once
Before this change, mpv_wait_event() could inconsistently return multiple MPV_EVENT_SHUTDOWN events to a single mpv_handle, up to the point of spamming the event queue under certain circumstances. Change this and just send it exactly once to each mpv_handle. Some client API users might have weird requirements about destroying their state asynchronously (and not reacting immediately to the SHUTDOWN event). This change will help a bit to make this less weird and surprising.
This commit is contained in:
parent
03791fae16
commit
2edf00fb94
@ -40,6 +40,8 @@ API changes
|
||||
- rename mpv_detach_destroy() to mpv_destroy() (the old function will
|
||||
remain valid as deprecated alias)
|
||||
- add mpv_create_weak_client(), which makes use of above changes
|
||||
- MPV_EVENT_SHUTDOWN is now returned exactly once if a mpv_handle
|
||||
should terminate, instead of spamming the event queue with this event
|
||||
1.28 - deprecate the render opengl_cb API, and replace it with render.h
|
||||
and render_gl.h. The goal is allowing support for APIs other than
|
||||
OpenGL. The old API is emulated with the new API.
|
||||
|
@ -1166,9 +1166,8 @@ typedef enum mpv_event_id {
|
||||
/**
|
||||
* Happens when the player quits. The player enters a state where it tries
|
||||
* to disconnect all clients. Most requests to the player will fail, and
|
||||
* mpv_wait_event() will always return instantly (returning new shutdown
|
||||
* events if no other events are queued). The client should react to this
|
||||
* and quit with mpv_destroy() as soon as possible.
|
||||
* the client should react to this and quit with mpv_destroy() as soon as
|
||||
* possible.
|
||||
*/
|
||||
MPV_EVENT_SHUTDOWN = 1,
|
||||
/**
|
||||
|
@ -634,6 +634,8 @@ static int append_event(struct mpv_handle *ctx, struct mpv_event event, bool cop
|
||||
ctx->events[(ctx->first_event + ctx->num_events) % ctx->max_events] = event;
|
||||
ctx->num_events++;
|
||||
wakeup_client(ctx);
|
||||
if (event.event_id == MPV_EVENT_SHUTDOWN)
|
||||
ctx->event_mask &= ctx->event_mask & ~(1ULL << MPV_EVENT_SHUTDOWN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user