From d1f7194a61f349bbd62ab1956001b1a905815ecb Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 23 一月 2024 16:23:48 +0800
Subject: [PATCH] bug fixed
---
src/bus_error.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 48 insertions(+), 4 deletions(-)
diff --git a/src/bus_error.cpp b/src/bus_error.cpp
index a9348e0..3836ebf 100644
--- a/src/bus_error.cpp
+++ b/src/bus_error.cpp
@@ -11,7 +11,7 @@
static pthread_key_t strerrorKey;
-static char *_bus_errlist[_bus_nerr] = {
+static const char *_bus_errlist[_bus_nerr] = {
"\0",
"Timed out",
"The other end is not inline",
@@ -19,7 +19,13 @@
"Network fault",
"Send to self error",
"Receive from wrong end",
- "Service stoped"
+ "Service stoped",
+ "Exceed resource limit",
+ "Service not supported",
+ "Resource busy",
+ "Resource not provide",
+ "Invalid parameters",
+ "No enough memory"
};
@@ -43,7 +49,7 @@
}
char *
-bus_strerror(int err)
+bus_strerror(int err, int flag)
{
int s;
char *buf;
@@ -58,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閿欒
@@ -96,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