summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--input/ipc.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/input/ipc.c b/input/ipc.c
index 3d2a35f558..1fb096842b 100644
--- a/input/ipc.c
+++ b/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;