From 5c912c70e9333298ff48f7ea15424f72ca977b99 Mon Sep 17 00:00:00 2001
From: Fu Juntang <StrongTiger_001@163.com>
Date: 星期五, 17 九月 2021 09:43:55 +0800
Subject: [PATCH] Add the heartbeat logic feature.

---
 src/bus_error.cpp |   57 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 52 insertions(+), 5 deletions(-)

diff --git a/src/bus_error.cpp b/src/bus_error.cpp
index 179211f..3836ebf 100644
--- a/src/bus_error.cpp
+++ b/src/bus_error.cpp
@@ -11,12 +11,21 @@
 static pthread_key_t strerrorKey;
 
 
-static char *_bus_errlist[_bus_nerr] = {
+static const char *_bus_errlist[_bus_nerr] = {
   "\0",
-  "Timeout",
+  "Timed out",
   "The other end is not inline",
   "Key already in use",
-  "Network fault"
+  "Network fault",
+  "Send to self error",
+  "Receive from wrong end",
+  "Service stoped",
+  "Exceed resource limit",
+  "Service not supported",
+  "Resource busy",
+  "Resource not provide",
+  "Invalid parameters",
+  "No enough memory"
 
 };
 
@@ -40,7 +49,7 @@
 }
 
 char *
-bus_strerror(int err)
+bus_strerror(int err, int flag)
 {
   int s;
   char *buf;
@@ -55,15 +64,23 @@
   {
     /* If first call from this thread, allocate
                                    buffer for thread, and save its location */
-    buf = (char *)malloc(MAX_ERROR_LEN);
+    buf = (char *)malloc(MAX_ERROR_LEN + sizeof(int));
     if (buf == NULL)
       err_exit(errno, "malloc");
 
+    memset(buf, 0x00, MAX_ERROR_LEN + sizeof(int));
     s = pthread_setspecific(strerrorKey, buf);
     if (s != 0)
       err_exit(s, "pthread_setspecific");
   }
 
+  if (flag != 0) {
+    err = *(int *)(buf + MAX_ERROR_LEN);
+  }
+
+  if (err == 0) {
+    err = EBUS_BASE;
+  }
 
   if(err < EBUS_BASE) {
     // libc閿欒
@@ -93,3 +110,33 @@
 
   return buf;
 }
+
+void bus_errorset(int err)
+{
+  int s;
+  char *buf;
+  /* Make first caller allocate key for thread-specific data */
+  s = pthread_once(&once, createKey);
+  if (s != 0)
+    err_exit(s, "pthread_once");
+
+  buf = (char *)pthread_getspecific(strerrorKey);
+  if (buf == NULL)
+  {
+    /* If first call from this thread, allocate
+                                   buffer for thread, and save its location */
+    buf = (char *)malloc(MAX_ERROR_LEN + sizeof(int));
+    if (buf == NULL)
+      err_exit(errno, "malloc");
+
+    s = pthread_setspecific(strerrorKey, buf);
+    if (s != 0)
+      err_exit(s, "pthread_setspecific");
+  } 
+ 
+  *(int *)(buf + MAX_ERROR_LEN) = err;
+
+}
+
+
+

--
Gitblit v1.8.0