From: Jaroslav Kysela Date: Thu, 10 Mar 2016 19:04:44 +0000 (+0100) Subject: api_idnode_handler: do not call idnode_perm_unset for destroyed idnode (clang sanitizer) X-Git-Tag: v4.2.1~888 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=75d640c711c40b903aaa48cedf9caab0d0f6306d;p=thirdparty%2Ftvheadend.git api_idnode_handler: do not call idnode_perm_unset for destroyed idnode (clang sanitizer) --- diff --git a/src/api.h b/src/api.h index b5365e0e4..d0d8eeea4 100644 --- a/src/api.h +++ b/src/api.h @@ -115,7 +115,7 @@ int api_idnode_load_by_class int api_idnode_handler ( access_t *perm, htsmsg_t *args, htsmsg_t **resp, - void (*handler)(access_t *perm, idnode_t *in), const char *op ); + void (*handler)(access_t *perm, idnode_t *in), const char *op, int destroyed ); int api_idnode_load_simple ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ); diff --git a/src/api/api_dvr.c b/src/api/api_dvr.c index 1ed2f633a..a0b8f3c67 100644 --- a/src/api/api_dvr.c +++ b/src/api/api_dvr.c @@ -266,7 +266,7 @@ static int api_dvr_entry_rerecord_toggle ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_dvr_rerecord_toggle, "rerecord"); + return api_idnode_handler(perm, args, resp, api_dvr_rerecord_toggle, "rerecord", 0); } static void @@ -279,7 +279,7 @@ static int api_dvr_entry_rerecord_deny ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_dvr_rerecord_deny, "rerecord"); + return api_idnode_handler(perm, args, resp, api_dvr_rerecord_deny, "rerecord", 0); } static void @@ -292,7 +292,7 @@ static int api_dvr_entry_rerecord_allow ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_dvr_rerecord_allow, "rerecord"); + return api_idnode_handler(perm, args, resp, api_dvr_rerecord_allow, "rerecord", 0); } static void @@ -305,7 +305,7 @@ static int api_dvr_entry_stop ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_dvr_stop, "stop"); + return api_idnode_handler(perm, args, resp, api_dvr_stop, "stop", 0); } static void @@ -318,7 +318,7 @@ static int api_dvr_entry_cancel ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_dvr_cancel, "cancel"); + return api_idnode_handler(perm, args, resp, api_dvr_cancel, "cancel", 0); } static void @@ -331,7 +331,7 @@ static int api_dvr_entry_move_finished ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_dvr_move_finished, "move finished"); + return api_idnode_handler(perm, args, resp, api_dvr_move_finished, "move finished", 0); } static void @@ -344,7 +344,7 @@ static int api_dvr_entry_move_failed ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_dvr_move_failed, "move failed"); + return api_idnode_handler(perm, args, resp, api_dvr_move_failed, "move failed", 0); } static void diff --git a/src/api/api_idnode.c b/src/api/api_idnode.c index 499a5f9bd..6bfbbd82a 100644 --- a/src/api/api_idnode.c +++ b/src/api/api_idnode.c @@ -613,7 +613,7 @@ int api_idnode_handler ( access_t *perm, htsmsg_t *args, htsmsg_t **resp, void (*handler)(access_t *perm, idnode_t *in), - const char *op ) + const char *op, int destroyed ) { int err = 0; idnode_t *in; @@ -645,7 +645,8 @@ api_idnode_handler continue; } handler(perm, in); - idnode_perm_unset(in); + if (!destroyed) + idnode_perm_unset(in); cnt++; } htsmsg_destroy(msg); @@ -686,7 +687,7 @@ static int api_idnode_delete ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_idnode_delete_, "delete"); + return api_idnode_handler(perm, args, resp, api_idnode_delete_, "delete", 1); } static void @@ -699,7 +700,7 @@ static int api_idnode_moveup ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_idnode_moveup_, "moveup"); + return api_idnode_handler(perm, args, resp, api_idnode_moveup_, "moveup", 0); } static void @@ -712,7 +713,7 @@ static int api_idnode_movedown ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp ) { - return api_idnode_handler(perm, args, resp, api_idnode_movedown_, "movedown"); + return api_idnode_handler(perm, args, resp, api_idnode_movedown_, "movedown", 0); } void api_idnode_init ( void )