From f5c4069d81aae5695a26165c6ce872b5db1d443c Mon Sep 17 00:00:00 2001 From: Roman Tokarev <rtokarev@corp.mail.ru> Date: Fri, 20 May 2011 13:57:28 +0400 Subject: [PATCH] Change location of fiber->name and palloc_pool->name fields from external (allocated outside a structure) to internal one (within a structure). --- core/fiber.c | 38 ++++++++++++++++++++++++-------------- core/palloc.c | 15 +++++++-------- core/tarantool.c | 2 +- include/fiber.h | 5 ++++- include/palloc.h | 2 +- mod/feeder/feeder.c | 2 +- 6 files changed, 38 insertions(+), 26 deletions(-) diff --git a/core/fiber.c b/core/fiber.c index 3d184addfa..80fbe6ca1b 100644 --- a/core/fiber.c +++ b/core/fiber.c @@ -280,7 +280,6 @@ void fiber_gc(void) { struct palloc_pool *tmp; - const char *tmp_name; fiber_cleanup(); @@ -290,9 +289,8 @@ fiber_gc(void) tmp = fiber->pool; fiber->pool = ex_pool; ex_pool = tmp; - tmp_name = palloc_name(fiber->pool, NULL); - palloc_name(fiber->pool, palloc_name(ex_pool, NULL)); - palloc_name(ex_pool, tmp_name); + palloc_set_name(fiber->pool, fiber->name); + palloc_set_name(ex_pool, "ex_pool"); fiber->rbuf = tbuf_clone(fiber->pool, fiber->rbuf); fiber->cleanup = tbuf_clone(fiber->pool, fiber->cleanup); @@ -326,7 +324,7 @@ static void fiber_zombificate() { diag_clear(); - fiber->name = NULL; + fiber_set_name(fiber, "zombie"); fiber->f = NULL; fiber->data = NULL; unregister_fid(fiber); @@ -357,9 +355,20 @@ fiber_loop(void *data __unused__) #define MAP_ANONYMOUS MAP_ANON #endif +/** Set fiber name. +* @Param[in] name the new name of the fiber. Truncated to FIBER_NAME_MAXLEN. +*/ + +void +fiber_set_name(struct fiber *fiber, const char *name) +{ + assert(name != NULL); + snprintf(fiber->name, sizeof(fiber->name), "%s", name); +} + /* fiber never dies, just become zombie */ struct fiber * -fiber_create(const char *restrict name, int fd, int inbox_size, void (*f) (void *), void *f_data) +fiber_create(const char *name, int fd, int inbox_size, void (*f) (void *), void *f_data) { struct fiber *fiber = NULL; if (inbox_size <= 0) @@ -377,7 +386,7 @@ fiber_create(const char *restrict name, int fd, int inbox_size, void (*f) (void if (tarantool_coro_create(&fiber->coro, fiber_loop, NULL) == NULL) return NULL; - fiber->pool = palloc_create_pool(fiber->name); + fiber->pool = palloc_create_pool(name); fiber->inbox = palloc(eter_pool, (sizeof(*fiber->inbox) + inbox_size * sizeof(struct tbuf *))); fiber->inbox->size = inbox_size; @@ -391,13 +400,13 @@ fiber_create(const char *restrict name, int fd, int inbox_size, void (*f) (void SLIST_INSERT_HEAD(&fibers, fiber, link); } - fiber->name = name; - palloc_name(fiber->pool, name); fiber->fd = fd; fiber->f = f; fiber->f_data = f_data; while (++last_used_fid <= 100) ; /* fids from 0 to 100 are reserved */ fiber->fid = last_used_fid; + fiber_set_name(fiber, name); + palloc_set_name(fiber->pool, fiber->name); register_fid(fiber); return fiber; @@ -844,7 +853,7 @@ struct child * spawn_child(const char *name, int inbox_size, struct tbuf *(*handler) (void *, struct tbuf *), void *state) { - char *proxy_name, *child_name; + char *proxy_name; int socks[2]; int pid; @@ -876,11 +885,12 @@ spawn_child(const char *name, int inbox_size, struct tbuf *(*handler) (void *, s c->out->reading_inbox = true; return c; } else { + char child_name[sizeof(fiber->name)]; + salloc_destroy(); close_all_xcpt(2, socks[0], sayfd); - child_name = palloc(eter_pool, 64); - snprintf(child_name, 64, "%s/child", name); - sched.name = child_name; + snprintf(child_name, sizeof(child_name), "%s/child", name); + fiber_set_name(&sched, child_name); set_proc_title(name); say_crit("%s initialized", name); blocking_loop(socks[0], handler, state); @@ -1116,7 +1126,7 @@ fiber_init(void) memset(&sched, 0, sizeof(sched)); sched.fid = 1; - sched.name = "sched"; + fiber_set_name(&sched, "sched"); sched.pool = palloc_create_pool(sched.name); sp = call_stack; diff --git a/core/palloc.c b/core/palloc.c index b0209cbbd3..c1d3505d65 100644 --- a/core/palloc.c +++ b/core/palloc.c @@ -66,7 +66,7 @@ struct palloc_pool { struct chunk_list_head chunks; SLIST_ENTRY(palloc_pool) link; size_t allocated; - const char *name; + char name[16]; }; SLIST_HEAD(palloc_pool_head, palloc_pool) pools; @@ -303,7 +303,7 @@ palloc_create_pool(const char *name) struct palloc_pool *pool = malloc(sizeof(struct palloc_pool)); assert(pool != NULL); memset(pool, 0, sizeof(*pool)); - pool->name = name; + palloc_set_name(pool, name); SLIST_INIT(&pool->chunks); SLIST_INSERT_HEAD(&pools, pool, link); VALGRIND_CREATE_MEMPOOL(pool, PALLOC_REDZONE, 0); @@ -368,13 +368,12 @@ palloc_stat(struct tbuf *buf) } } -const char * -palloc_name(struct palloc_pool *pool, const char *new_name) +void +palloc_set_name(struct palloc_pool *pool, const char *name) { - const char *old_name = pool->name; - if (new_name != NULL) - pool->name = new_name; - return old_name; + if (name == NULL) + name = "undefined"; + snprintf(pool->name, sizeof(pool->name), "%s", name); } size_t diff --git a/core/tarantool.c b/core/tarantool.c index 4d7353a155..501bdee086 100644 --- a/core/tarantool.c +++ b/core/tarantool.c @@ -200,7 +200,7 @@ snapshot(void *ev, int events __unused__) return WEXITSTATUS(fiber->cw.rstatus); } - fiber->name = "dumper"; + fiber_set_name(fiber, "dumper"); set_proc_title("dumper (%" PRIu32 ")", getppid()); close_all_xcpt(1, sayfd); snapshot_save(recovery_state, mod_snapshot); diff --git a/include/fiber.h b/include/fiber.h index 6dd98cb70b..8e00965e25 100644 --- a/include/fiber.h +++ b/include/fiber.h @@ -41,6 +41,8 @@ #include <coro.h> #include <util.h> +#define FIBER_NAME_MAXLEN 16 + #define FIBER_EXIT -1 struct msg { @@ -79,7 +81,7 @@ struct fiber { jmp_buf exc; const char *errstr; - const char *name; + char name[FIBER_NAME_MAXLEN]; void (*f) (void *); void *f_data; @@ -112,6 +114,7 @@ extern struct fiber *fiber; void fiber_init(void); struct fiber *fiber_create(const char *name, int fd, int inbox_size, void (*f) (void *), void *); +void fiber_set_name(struct fiber *fiber, const char *name); void wait_for(int events); void wait_for_child(pid_t pid); void unwait(int events); diff --git a/include/palloc.h b/include/palloc.h index 41a03ce679..1a51c8479a 100644 --- a/include/palloc.h +++ b/include/palloc.h @@ -45,7 +45,7 @@ void prelease(struct palloc_pool *pool); void prelease_after(struct palloc_pool *pool, size_t after); struct palloc_pool *palloc_create_pool(const char *name); void palloc_destroy(struct palloc_pool *); -const char *palloc_name(struct palloc_pool *, const char *); +void palloc_set_name(struct palloc_pool *, const char *); size_t palloc_allocated(struct palloc_pool *); void palloc_stat(struct tbuf *buf); diff --git a/mod/feeder/feeder.c b/mod/feeder/feeder.c index 16d31d8335..a84512a894 100644 --- a/mod/feeder/feeder.c +++ b/mod/feeder/feeder.c @@ -65,7 +65,7 @@ recover_feed_slave(int sock) fiber->has_peer = true; fiber->fd = sock; - fiber->name = "feeder"; + fiber_set_name(fiber, "feeder"); set_proc_title("feeder:client_handler%s %s", custom_proc_title, fiber_peer_name(fiber)); ev_default_loop(0); -- GitLab