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:
wm4 2014-11-01 13:36:55 +01:00
parent d915ef7f0f
commit a1e7daf942
1 changed files with 16 additions and 4 deletions

View File

@ -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;