]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
api_idnode_handler: do not call idnode_perm_unset for destroyed idnode (clang sanitizer)
authorJaroslav Kysela <perex@perex.cz>
Thu, 10 Mar 2016 19:04:44 +0000 (20:04 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 10 Mar 2016 19:04:44 +0000 (20:04 +0100)
src/api.h
src/api/api_dvr.c
src/api/api_idnode.c

index b5365e0e437f1cf6e473fbe7029d69a3214eed21..d0d8eeea4682e3efe6969ee9ebff2d279d69322e 100644 (file)
--- 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 );
index 1ed2f633ae22e289545220b4eb1f4213777290d7..a0b8f3c67f94532944004608ded01139e8ea4fa9 100644 (file)
@@ -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
index 499a5f9bda20315315a9dab3ff8e008f10076ca4..6bfbbd82a9703158cc2c49b5c6a64498146c6384 100644 (file)
@@ -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 )