From: Andre Noll Date: Sun, 31 Mar 2013 15:34:50 +0000 (+0000) Subject: buffer_tree: Improve btr_splice_out_node(). X-Git-Tag: v0.5.1~9^2~1 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=072391fccbd052334dbd836d451f2be0a74a0685;hp=74145aabe851ba5b7eff47b650f401f49b5c740d buffer_tree: Improve btr_splice_out_node(). 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. --- diff --git a/amp_filter.c b/amp_filter.c index dddc0a85..b0f36872 100644 --- a/amp_filter.c +++ b/amp_filter.c @@ -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: diff --git a/buffer_tree.c b/buffer_tree.c index b1eeb036..84dc933a 100644 --- a/buffer_tree.c +++ b/buffer_tree.c @@ -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; } /** diff --git a/buffer_tree.h b/buffer_tree.h index 20dcd62d..6127dd92 100644 --- a/buffer_tree.h +++ b/buffer_tree.h @@ -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); diff --git a/prebuffer_filter.c b/prebuffer_filter.c index 655c981b..f4ef76e2 100644 --- a/prebuffer_filter.c +++ b/prebuffer_filter.c @@ -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; } diff --git a/wav_filter.c b/wav_filter.c index 83b81fb2..eaef1f5c 100644 --- a/wav_filter.c +++ b/wav_filter.c @@ -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));