71 lines
2.4 KiB
Diff
71 lines
2.4 KiB
Diff
|
|
From 336703252c327d82f49d40f79b1d1e4e65a9281e Mon Sep 17 00:00:00 2001
|
|||
|
|
From: jiangheng <jiangheng12@huawei.com>
|
|||
|
|
Date: Tue, 19 Apr 2022 19:49:06 +0800
|
|||
|
|
Subject: [PATCH 02/18] exit lstack process after ltran instance logout
|
|||
|
|
|
|||
|
|
close fd is to notify ltran to execute the lstack instance logout.
|
|||
|
|
200ms is an empirical value of instance logout.
|
|||
|
|
---
|
|||
|
|
src/lstack/api/lstack_signal.c | 4 +++-
|
|||
|
|
src/lstack/core/lstack_control_plane.c | 9 +++++++++
|
|||
|
|
src/lstack/include/lstack_control_plane.h | 1 +
|
|||
|
|
3 files changed, 13 insertions(+), 1 deletion(-)
|
|||
|
|
|
|||
|
|
diff --git a/src/lstack/api/lstack_signal.c b/src/lstack/api/lstack_signal.c
|
|||
|
|
index f4763e8..87cbdda 100644
|
|||
|
|
--- a/src/lstack/api/lstack_signal.c
|
|||
|
|
+++ b/src/lstack/api/lstack_signal.c
|
|||
|
|
@@ -19,8 +19,9 @@
|
|||
|
|
#include <lwip/posix_api.h>
|
|||
|
|
|
|||
|
|
#include "lstack_log.h"
|
|||
|
|
+#include "lstack_control_plane.h"
|
|||
|
|
|
|||
|
|
-static int g_hijack_signal[] = { SIGTERM, SIGINT, SIGSEGV, SIGBUS, SIGFPE, SIGILL };
|
|||
|
|
+static int g_hijack_signal[] = { SIGTERM, SIGINT, SIGSEGV, SIGBUS, SIGFPE, SIGILL, SIGKILL};
|
|||
|
|
#define HIJACK_SIGNAL_COUNT (sizeof(g_hijack_signal) / sizeof(g_hijack_signal[0]))
|
|||
|
|
#define BACKTRACE_SIZE 64
|
|||
|
|
static void dump_stack(void)
|
|||
|
|
@@ -54,6 +55,7 @@ static inline bool match_hijack_signal(int sig)
|
|||
|
|
static void lstack_sig_default_handler(int sig)
|
|||
|
|
{
|
|||
|
|
LSTACK_LOG(ERR, LSTACK, "lstack dumped,caught signal:%d\n", sig);
|
|||
|
|
+ control_fd_close();
|
|||
|
|
dump_stack();
|
|||
|
|
lwip_exit();
|
|||
|
|
(void)kill(getpid(), sig);
|
|||
|
|
diff --git a/src/lstack/core/lstack_control_plane.c b/src/lstack/core/lstack_control_plane.c
|
|||
|
|
index c782d51..01b2ff0 100644
|
|||
|
|
--- a/src/lstack/core/lstack_control_plane.c
|
|||
|
|
+++ b/src/lstack/core/lstack_control_plane.c
|
|||
|
|
@@ -446,6 +446,15 @@ int32_t client_reg_thrd_ring(void)
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
+void control_fd_close(void)
|
|||
|
|
+{
|
|||
|
|
+ if (g_data_fd != 0) {
|
|||
|
|
+ close(g_data_fd);
|
|||
|
|
+ /* 200ms: wait ltran instance logout */
|
|||
|
|
+ rte_delay_ms(200);
|
|||
|
|
+ }
|
|||
|
|
+}
|
|||
|
|
+
|
|||
|
|
int32_t control_init_client(bool is_reconnect)
|
|||
|
|
{
|
|||
|
|
int32_t ret;
|
|||
|
|
diff --git a/src/lstack/include/lstack_control_plane.h b/src/lstack/include/lstack_control_plane.h
|
|||
|
|
index 0af891a..1fa84e6 100644
|
|||
|
|
--- a/src/lstack/include/lstack_control_plane.h
|
|||
|
|
+++ b/src/lstack/include/lstack_control_plane.h
|
|||
|
|
@@ -32,5 +32,6 @@ void control_server_thread(void *arg);
|
|||
|
|
bool get_register_state(void);
|
|||
|
|
void thread_register_phase1(struct rpc_msg *msg);
|
|||
|
|
void thread_register_phase2(struct rpc_msg *msg);
|
|||
|
|
+void control_fd_close(void);
|
|||
|
|
|
|||
|
|
#endif /* GAZELLE_CONTROL_PLANE_H */
|
|||
|
|
--
|
|||
|
|
2.23.0
|
|||
|
|
|