]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
idnode: a better mechanism to not save idnode data in the destroy phase
authorJaroslav Kysela <perex@perex.cz>
Thu, 11 Feb 2016 14:02:55 +0000 (15:02 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 11 Feb 2016 14:02:55 +0000 (15:02 +0100)
src/idnode.c
src/idnode.h

index cf9b2f23861db9eede7f662a52a93b29849210af..66a02ab25f9abd4b28a89aa166b6e449214d130e 100644 (file)
@@ -161,7 +161,7 @@ idnode_unlink(idnode_t *in)
   RB_REMOVE(in->in_domain, in, in_domain_link);
   tvhtrace("idnode", "unlink node %s", idnode_uuid_as_str(in, ubuf));
   idnode_notify(in, "delete");
-  assert(in->in_save == NULL);
+  assert(in->in_save == NULL || in->in_save == SAVEPTR_OUTOFSERVICE);
 }
 
 /**
@@ -1113,12 +1113,12 @@ idnode_save_check ( idnode_t *self, int weak )
   char filename[PATH_MAX];
   htsmsg_t *m;
 
-  if (self->in_save == NULL)
+  if (self->in_save == NULL || self->in_save == SAVEPTR_OUTOFSERVICE)
     return;
 
   TAILQ_REMOVE(&idnodes_save, self->in_save, ise_link);
   free(self->in_save);
-  self->in_save = NULL;
+  self->in_save = SAVEPTR_OUTOFSERVICE;
 
   if (weak)
     return;
index 0b77766af219ca3a55f4a046bdfcbe20ab9e7735..19053b60ff9b7f5c341d33eab6fa649847576a10 100644 (file)
@@ -30,6 +30,8 @@ struct access;
 typedef struct idnode idnode_t;
 typedef struct idnode_save idnode_save_t;
 
+#define SAVEPTR_OUTOFSERVICE ((void *)((intptr_t)-1LL))
+
 /*
  * Node set
  */