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