buffer_tree: Improve btr_splice_out_node().
authorAndre Noll <maan@systemlinux.org>
Sun, 31 Mar 2013 15:34:50 +0000 (15:34 +0000)
committerAndre Noll <maan@systemlinux.org>
Sun, 29 Sep 2013 11:00:37 +0000 (13:00 +0200)
This changes btr_splice_out_node() to take a pointer to a btrn, just
like btr_remove_node(). This allows to set the variable to NULL after
the node has been spliced out. The callers are updated accordingly.

amp_filter.c
buffer_tree.c
buffer_tree.h
prebuffer_filter.c
wav_filter.c

index dddc0a8..b0f3687 100644 (file)
@@ -73,7 +73,7 @@ static int amp_post_select(__a_unused struct sched *s, struct task *t)
        bool inplace = btr_inplace_ok(btrn);
 
        if (pad->amp == 0) { /* no amplification */
-               btr_splice_out_node(btrn);
+               btr_splice_out_node(&fn->btrn);
                return -E_AMP_ZERO_AMP;
        }
 next_buffer:
index b1eeb03..84dc933 100644 (file)
@@ -835,7 +835,7 @@ size_t btr_get_input_queue_size(struct btr_node *btrn)
 /**
  * Remove a node from the buffer tree, reconnecting parent and children.
  *
- * \param btrn The node to splice out.
+ * \param btrnp The node to splice out.
  *
  * This function is used by buffer tree nodes that do not exist during the
  * whole lifetime of the buffer tree. Unlike btr_remove_node(), calling
@@ -843,9 +843,9 @@ size_t btr_get_input_queue_size(struct btr_node *btrn)
  * but reconnects the buffer tree by making all child nodes of \a btrn children
  * of the parent of \a btrn.
  */
-void btr_splice_out_node(struct btr_node *btrn)
+void btr_splice_out_node(struct btr_node **btrnp)
 {
-       struct btr_node *ch, *tmp;
+       struct btr_node *btrn = *btrnp, *ch, *tmp;
 
        assert(btrn);
        PARA_NOTICE_LOG("splicing out %s\n", btrn->name);
@@ -862,7 +862,7 @@ void btr_splice_out_node(struct btr_node *btrn)
                        list_del(&ch->node);
        }
        assert(list_empty(&btrn->children));
-       btrn->parent = NULL;
+       *btrnp = NULL;
 }
 
 /**
index 20dcd62..6127dd9 100644 (file)
@@ -192,7 +192,7 @@ size_t btr_next_buffer(struct btr_node *btrn, char **bufp);
 size_t btr_next_buffer_omit(struct btr_node *btrn, size_t omit, char **bufp);
 void btr_consume(struct btr_node *btrn, size_t numbytes);
 int btr_exec_up(struct btr_node *btrn, const char *command, char **value_result);
-void btr_splice_out_node(struct btr_node *btrn);
+void btr_splice_out_node(struct btr_node **btrnp);
 void btr_pushdown(struct btr_node *btrn);
 void *btr_context(struct btr_node *btrn);
 void btr_merge(struct btr_node *btrn, size_t dest_size);
index 655c981..f4ef76e 100644 (file)
@@ -70,7 +70,7 @@ static int prebuffer_post_select(__a_unused struct sched *s, struct task *t)
                return 0;
        if (iqs < conf->size_arg)
                return 0;
-       btr_splice_out_node(fn->btrn);
+       btr_splice_out_node(&fn->btrn);
        return -E_PREBUFFER_SUCCESS;
 }
 
index 83b81fb..eaef1f5 100644 (file)
@@ -113,7 +113,7 @@ static int wav_post_select(__a_unused struct sched *s, struct task *t)
        ret = -E_WAV_SUCCESS;
 err:
        if (ret == -E_WAV_SUCCESS)
-               btr_splice_out_node(btrn);
+               btr_splice_out_node(&fn->btrn);
        else {
                btr_remove_node(&fn->btrn);
                PARA_ERROR_LOG("%s\n", para_strerror(-ret));