mirror of
https://github.com/mpv-player/mpv
synced 2024-12-19 05:15:12 +00:00
ipc: verify resume/suspend commands
Calling mpv_resume() too often is considered an API usage violation, and will trigger an internal assertion somewhere.
This commit is contained in:
parent
d915ef7f0f
commit
a1e7daf942
20
input/ipc.c
20
input/ipc.c
@ -60,6 +60,8 @@ struct client_arg {
|
||||
int client_fd;
|
||||
|
||||
bool writable;
|
||||
|
||||
int suspend_counter;
|
||||
};
|
||||
|
||||
static mpv_node *mpv_node_map_get(mpv_node *src, const char *key)
|
||||
@ -409,11 +411,21 @@ static char *json_execute_command(struct client_arg *arg, void *ta_parent,
|
||||
rc = mpv_unobserve_property(arg->client,
|
||||
cmd_node->u.list->values[1].u.int64);
|
||||
} else if (!strcmp("suspend", cmd)) {
|
||||
mpv_suspend(arg->client);
|
||||
rc = MPV_ERROR_SUCCESS;
|
||||
if (arg->suspend_counter < INT_MAX) {
|
||||
mpv_suspend(arg->client);
|
||||
arg->suspend_counter++;
|
||||
rc = MPV_ERROR_SUCCESS;
|
||||
} else {
|
||||
rc = MPV_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
} else if (!strcmp("resume", cmd)) {
|
||||
mpv_resume(arg->client);
|
||||
rc = MPV_ERROR_SUCCESS;
|
||||
if (arg->suspend_counter > 0) {
|
||||
mpv_resume(arg->client);
|
||||
arg->suspend_counter--;
|
||||
rc = MPV_ERROR_SUCCESS;
|
||||
} else {
|
||||
rc = MPV_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
} else {
|
||||
mpv_node result_node;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user