X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=buffer_tree.c;h=8a3175133e69aa57eff7da5155341cbf05532d03;hb=HEAD;hp=5afa3ad3deda281415cfd172af0c13092b95ad67;hpb=f76ab46a9216133332cb7e17d38d392caeca22cb;p=paraslash.git diff --git a/buffer_tree.c b/buffer_tree.c index 5afa3ad3..35353f56 100644 --- a/buffer_tree.c +++ b/buffer_tree.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2009-2014 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2009 Andre Noll , see file COPYING. */ /** \file buffer_tree.c Buffer tree and buffer pool implementations. */ #include @@ -76,8 +72,8 @@ struct btr_pool *btr_pool_new(const char *name, size_t area_size) struct btr_pool *btrp; PARA_INFO_LOG("%s, %zu bytes\n", name, area_size); - btrp = para_malloc(sizeof(*btrp)); - btrp->area_start = para_malloc(area_size); + btrp = alloc(sizeof(*btrp)); + btrp->area_start = alloc(area_size); btrp->area_end = btrp->area_start + area_size; btrp->rhead = btrp->area_start; btrp->whead = btrp->area_start; @@ -266,7 +262,7 @@ static void btr_pool_deallocate(struct btr_pool *btrp, size_t size) */ struct btr_node *btr_new_node(struct btr_node_description *bnd) { - struct btr_node *btrn = para_malloc(sizeof(*btrn)); + struct btr_node *btrn = alloc(sizeof(*btrn)); btrn->name = para_strdup(bnd->name); btrn->parent = bnd->parent; @@ -274,8 +270,8 @@ struct btr_node *btr_new_node(struct btr_node_description *bnd) btrn->context = bnd->context; btrn->start.tv_sec = 0; btrn->start.tv_usec = 0; - INIT_LIST_HEAD(&btrn->children); - INIT_LIST_HEAD(&btrn->input_queue); + init_list_head(&btrn->children); + init_list_head(&btrn->input_queue); if (!bnd->child) { if (bnd->parent) { list_add_tail(&btrn->node, &bnd->parent->children); @@ -311,7 +307,7 @@ out: */ static struct btr_buffer *new_btrb(char *buf, size_t size) { - struct btr_buffer *btrb = para_calloc(sizeof(*btrb)); + struct btr_buffer *btrb = zalloc(sizeof(*btrb)); btrb->buf = buf; btrb->size = size; @@ -358,7 +354,7 @@ static void add_btrb_to_children(struct btr_buffer *btrb, if (btrn->start.tv_sec == 0) btrn->start = *now; FOR_EACH_CHILD(ch, btrn) { - struct btr_buffer_reference *br = para_calloc(sizeof(*br)); + struct btr_buffer_reference *br = zalloc(sizeof(*br)); br->btrb = btrb; br->consumed = consumed; list_add_tail(&br->node, &ch->input_queue); @@ -574,7 +570,7 @@ bool btr_no_parent(struct btr_node *btrn) * buffer. * * Since the buffer tree may change at any time, this function should be called - * during each post_select call. + * during each post_monitor call. * * \return True if \a btrn has no siblings. */ @@ -771,6 +767,12 @@ void btr_drain(struct btr_node *btrn) btr_drop_buffer_reference(br); } +static void btr_free_node(struct btr_node *btrn) +{ + free(btrn->name); + free(btrn); +} + /** * Remove a node from a buffer tree. * @@ -798,8 +800,7 @@ void btr_remove_node(struct btr_node **btrnp) btr_drain(btrn); if (btrn->parent) list_del(&btrn->node); - free(btrn->name); - free(btrn); + btr_free_node(btrn); out: *btrnp = NULL; } @@ -862,6 +863,7 @@ void btr_splice_out_node(struct btr_node **btrnp) list_del(&ch->node); } assert(list_empty(&btrn->children)); + btr_free_node(btrn); *btrnp = NULL; } @@ -899,7 +901,7 @@ size_t btr_get_output_queue_size(struct btr_node *btrn) * \return \p -ENOTSUP if no parent node of \a btrn understands \a command. * Otherwise the return value of the command handler is returned. * - * \sa \ref receiver::execute, filter::execute, writer::execute. + * \sa \ref receiver::execute, \ref filter::execute, \ref writer::execute. */ int btr_exec_up(struct btr_node *btrn, const char *command, char **value_result) { @@ -929,7 +931,7 @@ int btr_exec_up(struct btr_node *btrn, const char *command, char **value_result) * * \return A pointer to the \a context address specified at node creation time. * - * \sa btr_new_node(), struct \ref btr_node_description. + * \sa \ref btr_new_node(), struct \ref btr_node_description. */ void *btr_context(struct btr_node *btrn) { @@ -1005,12 +1007,12 @@ next: if (!wbr) { /* Make a new wrap buffer combining buf1 and buf2. */ sz = sz1 + sz2; - buf = para_malloc(sz); + buf = alloc(sz); PARA_DEBUG_LOG("merging input buffers: (%p:%zu, %p:%zu) -> %p:%zu\n", buf1, sz1, buf2, sz2, buf, sz); memcpy(buf, buf1, sz1); memcpy(buf + sz1, buf2, sz2); - br = para_calloc(sizeof(*br)); + br = zalloc(sizeof(*br)); br->btrb = new_btrb(buf, sz); br->btrb->refcount = 1; br->consumed = 0; @@ -1065,13 +1067,13 @@ static int merge_input(struct btr_node *btrn) assert(i == 2); /* make a new btrb that combines the two buffers and a br to it. */ sz = szs[0] + szs[1]; - buf = para_malloc(sz); + buf = alloc(sz); PARA_DEBUG_LOG("%s: memory merging input buffers: (%zu, %zu) -> %zu\n", btrn->name, szs[0], szs[1], sz); memcpy(buf, bufs[0], szs[0]); memcpy(buf + szs[0], bufs[1], szs[1]); - br = para_calloc(sizeof(*br)); + br = zalloc(sizeof(*br)); br->btrb = new_btrb(buf, sz); br->btrb->refcount = 1; @@ -1179,7 +1181,7 @@ struct btr_node *btr_search_node(const char *name, struct btr_node *root) * \param type The supposed type of \a btrn. * * Most users of the buffer tree subsystem call this function from both - * their pre_select and the post_select methods. + * their ->pre_monitor() and ->post_monitor() methods. * * \return Negative if an error condition was detected, zero if there * is nothing to do and positive otherwise. @@ -1206,7 +1208,7 @@ int btr_node_status(struct btr_node *btrn, size_t min_iqs, if (type != BTR_NT_LEAF && btr_no_children(btrn)) return -E_BTR_NO_CHILD; if (type != BTR_NT_ROOT && btr_eof(btrn)) - return -E_BTR_EOF; + return -E_EOF; if (btr_get_output_queue_size(btrn) > BTRN_MAX_PENDING) return 0;