From eb76f8b7b7a5d8f3de00b631bd8c66663005ed24 Mon Sep 17 00:00:00 2001
From: godzie44 <godzie@yandex.ru>
Date: Wed, 1 Nov 2023 13:48:07 +0300
Subject: [PATCH] Part of #37

Add `current_cord_name` function to get a name of the current cord,
add `cord_is_main_dont_create` function.
Add exports for `cord_is_main`, `cord_is_main_dont_create` and
`current_cord_name` functions.

NO_DOC=internal
NO_TEST=internal
NO_CHANGELOG=internal
---
 extra/exports        |  3 +++
 src/lib/core/fiber.c | 14 ++++++++++++++
 src/lib/core/fiber.h | 11 +++++++++++
 3 files changed, 28 insertions(+)

diff --git a/extra/exports b/extra/exports
index 07a6dd8937..a7c9d69ad9 100644
--- a/extra/exports
+++ b/extra/exports
@@ -184,6 +184,8 @@ console_set_output_format
 cord_ibuf_drop
 cord_ibuf_put
 cord_ibuf_take
+cord_is_main
+cord_is_main_dont_create
 cord_slab_cache
 crc32_calc
 crypto_ERR_error_string
@@ -213,6 +215,7 @@ csv_feed
 csv_iterator_create
 csv_next
 csv_setopt
+current_cord_name
 decimal_from_string
 decimal_unpack
 error_find_field
diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c
index 6e1a8e1ee2..95335a6271 100644
--- a/src/lib/core/fiber.c
+++ b/src/lib/core/fiber.c
@@ -2203,6 +2203,20 @@ cord_is_main(void)
 	return cord() == &main_cord;
 }
 
+bool
+cord_is_main_dont_create(void)
+{
+	return cord_ptr == &main_cord;
+}
+
+const char *
+current_cord_name(void)
+{
+	if (cord_ptr == NULL)
+		return NULL;
+	return cord_name(cord_ptr);
+}
+
 struct slab_cache *
 cord_slab_cache(void)
 {
diff --git a/src/lib/core/fiber.h b/src/lib/core/fiber.h
index afe8c2dba8..ad532e3839 100644
--- a/src/lib/core/fiber.h
+++ b/src/lib/core/fiber.h
@@ -949,10 +949,21 @@ cord_name(struct cord *cord)
 	return cord->name;
 }
 
+/** @return a current cord name. */
+API_EXPORT const char *
+current_cord_name(void);
+
 /** True if this cord represents the process main thread. */
 bool
 cord_is_main(void);
 
+/**
+ * Like `cord_is_main` but without creating a new cord
+ * if it doesn't exists.
+ */
+API_EXPORT bool
+cord_is_main_dont_create(void);
+
 /**
  * Delete the latest garbage fiber which couldn't be deleted somewhy before. Can
  * safely rely on the fiber being not the current one. Because if it was added
-- 
GitLab