From 4b3038cdda81cf45c75449bbe7e7a2137b1b4411 Mon Sep 17 00:00:00 2001 From: Konstantin Osipov <kostja@tarantool.org> Date: Wed, 13 Mar 2013 18:17:51 +0400 Subject: [PATCH] fiber.name(): take up some slack spotted while working on the new allocator fiber.name and fiber->gc_pool.name are always the same thing. Don't store the name twice. --- include/fiber.h | 10 +++++++--- src/fiber.m | 15 +++++++-------- src/lua/init.m | 2 +- src/replica.m | 2 +- src/replication.m | 2 +- src/say.m | 2 +- src/util.m | 3 ++- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/include/fiber.h b/include/fiber.h index 129b744d55..0d31a830de 100644 --- a/include/fiber.h +++ b/include/fiber.h @@ -42,7 +42,7 @@ #include "palloc.h" #include <rlist.h> -#define FIBER_NAME_MAXLEN 32 +#define FIBER_NAME_MAXLEN PALLOC_POOL_NAME_MAXLEN #define FIBER_READING_INBOX (1 << 0) /** This fiber can be cancelled synchronously. */ @@ -85,8 +85,6 @@ struct fiber { struct rlist link; struct rlist state; - /* ASCIIZ name of this fiber. */ - char name[FIBER_NAME_MAXLEN]; void (*f) (va_list); va_list f_data; u32 flags; @@ -101,6 +99,12 @@ struct fiber *fiber_new(const char *name, void (*f) (va_list)); void fiber_set_name(struct fiber *fiber, const char *name); int wait_for_child(pid_t pid); +static inline const char * +fiber_name(struct fiber *f) +{ + return palloc_name(f->gc_pool); +} + void fiber_yield(void); void fiber_yield_to(struct fiber *f); diff --git a/src/fiber.m b/src/fiber.m index 6ffa7f3831..3a1db8efd8 100644 --- a/src/fiber.m +++ b/src/fiber.m @@ -361,14 +361,14 @@ fiber_loop(void *data __attribute__((unused))) @try { fiber->f(fiber->f_data); } @catch (FiberCancelException *e) { - say_info("fiber `%s' has been cancelled", fiber->name); - say_info("fiber `%s': exiting", fiber->name); + say_info("fiber `%s' has been cancelled", fiber_name(fiber)); + say_info("fiber `%s': exiting", fiber_name(fiber)); } @catch (tnt_Exception *e) { [e log]; } @catch (id e) { say_error("fiber `%s': exception `%s'", - fiber->name, object_getClassName(e)); - panic("fiber `%s': exiting", fiber->name); + fiber_name(fiber), object_getClassName(e)); + panic("fiber `%s': exiting", fiber_name(fiber)); } fiber_zombificate(); fiber_yield(); /* give control back to scheduler */ @@ -385,8 +385,7 @@ void fiber_set_name(struct fiber *fiber, const char *name) { assert(name != NULL); - snprintf(fiber->name, sizeof(fiber->name), "%s", name); - palloc_set_name(fiber->gc_pool, fiber->name); + palloc_set_name(fiber->gc_pool, name); } /** @@ -447,7 +446,7 @@ fiber_destroy(struct fiber *f) { if (f == fiber) /* do not destroy running fiber */ return; - if (strcmp(f->name, "sched") == 0) + if (strcmp(fiber_name(f), "sched") == 0) return; rlist_del(&f->state); @@ -473,7 +472,7 @@ fiber_info_print(struct tbuf *out, struct fiber *fiber) tbuf_printf(out, " - fid: %4i" CRLF, fiber->fid); tbuf_printf(out, " csw: %i" CRLF, fiber->csw); - tbuf_printf(out, " name: %s" CRLF, fiber->name); + tbuf_printf(out, " name: %s" CRLF, fiber_name(fiber)); tbuf_printf(out, " stack: %p" CRLF, stack_top); #ifdef ENABLE_BACKTRACE tbuf_printf(out, " backtrace:" CRLF "%s", diff --git a/src/lua/init.m b/src/lua/init.m index c234345685..72841cf45b 100644 --- a/src/lua/init.m +++ b/src/lua/init.m @@ -747,7 +747,7 @@ lbox_fiber_name(struct lua_State *L) fiber_set_name(f, name); return 0; } else { - lua_pushstring(L, f->name); + lua_pushstring(L, fiber_name(f)); return 1; } } diff --git a/src/replica.m b/src/replica.m index c0f0dce2e2..be4af6d7df 100644 --- a/src/replica.m +++ b/src/replica.m @@ -106,7 +106,7 @@ pull_from_remote(va_list ap) fiber_setcancellable(true); if (! evio_is_active(&coio)) { if (iobuf == NULL) - iobuf = iobuf_new(fiber->name); + iobuf = iobuf_new(fiber_name(fiber)); remote_connect(&coio, &r->remote->addr, r->confirmed_lsn + 1, &err); warning_said = false; diff --git a/src/replication.m b/src/replication.m index 4792e7c659..bb4419aebd 100644 --- a/src/replication.m +++ b/src/replication.m @@ -296,7 +296,7 @@ replication_send_socket(ev_io *watcher, int events __attribute__((unused))) static void spawner_init(int sock) { - char name[sizeof(fiber->name)]; + char name[FIBER_NAME_MAXLEN]; struct sigaction sa; snprintf(name, sizeof(name), "spawner%s", custom_proc_title); diff --git a/src/say.m b/src/say.m index 6d08187349..b0fa1b2986 100644 --- a/src/say.m +++ b/src/say.m @@ -150,7 +150,7 @@ vsay(int level, const char *filename, int line, const char *error, const char *f ev_now() - now + tm.tm_sec); p += snprintf(buf + p, len - p, " [%i] %i/%s", getpid(), - fiber->fid, fiber->name); + fiber->fid, fiber_name(fiber)); if (level == S_WARN || level == S_ERROR) p += snprintf(buf + p, len - p, " %s:%i", filename, line); diff --git a/src/util.m b/src/util.m index 1f85d44558..799d62f5ef 100644 --- a/src/util.m +++ b/src/util.m @@ -276,7 +276,8 @@ print_backtrace() void *stack_top; size_t stack_size; - if (fiber == NULL || fiber->name == NULL || strcmp(fiber->name, "sched") == 0) { + if (fiber == NULL || fiber_name(fiber) == NULL || + strcmp(fiber_name(fiber), "sched") == 0) { stack_top = frame; /* we don't know where the system stack top is */ stack_size = __libc_stack_end - frame; } else { -- GitLab