From 8dead3c23da957fce542d8483c7bce7d5a7232ed Mon Sep 17 00:00:00 2001
From: Fu Juntang <StrongTiger_001@163.com>
Date: 星期三, 01 九月 2021 14:42:21 +0800
Subject: [PATCH] Fix the buf data parse issue.

---
 src/bh_api.cpp |   22 +++++++++++++---------
 1 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/bh_api.cpp b/src/bh_api.cpp
index 5fedc83..4d0f10b 100644
--- a/src/bh_api.cpp
+++ b/src/bh_api.cpp
@@ -344,6 +344,8 @@
       
       logger->error("in BHRegisterTopics: Out of memory!\n");
       
+      pthread_mutex_unlock(&mutex);
+
       goto exit_entry;
     }
     memset(topics_buf, 0x00, total);
@@ -365,13 +367,14 @@
 
 #else 
     memcpy(topics_buf, topics, topics_len);
+    count = topics_len;
 #endif 
 
-    rv = net_mod_socket_reg(gNetmod_socket, topics_buf, strlen(topics_buf) + 1, NULL, 0, timeout_ms, PROC_REG_TCS);
+    rv = net_mod_socket_reg(gNetmod_socket, topics_buf, count, NULL, 0, timeout_ms, PROC_REG_TCS);
 
     memset(errString, 0x00, sizeof(errString));
     strncpy(errString, bus_strerror(rv), sizeof(errString));
-    
+
     free(topics_buf);
     pthread_mutex_unlock(&mutex);
   
@@ -475,7 +478,7 @@
     buf = const_cast<void *>(topic);
     strncpy(topics_buf, (const char *)buf, min);
 #endif 
-    rv = net_mod_socket_reg(gNetmod_socket, topics_buf, strlen(topics_buf) + 1, &buf, &size, timeout_ms, PROC_QUE_TCS);
+    rv = net_mod_socket_reg(gNetmod_socket, topics_buf, min, &buf, &size, timeout_ms, PROC_QUE_TCS);
    
     memset(errString, 0x00, sizeof(errString));
     strncpy(errString, bus_strerror(rv), sizeof(errString));
@@ -789,7 +792,9 @@
       strncpy(errString, bus_strerror(rv), sizeof(errString));
       
       logger->error("in BHSubscribeTopics: Out of memory!\n");
-      
+  
+      pthread_mutex_unlock(&mutex);
+
       goto exit_entry;
     }
     memset(topics_buf, 0x00, total);
@@ -810,21 +815,22 @@
 
 #else 
     memcpy(topics_buf, topics, topics_len);
+    count = topics_len;
 #endif 
 
     if (timeout_ms > 0) {
     
       sec = timeout_ms / 1000;
       nsec = (timeout_ms - sec * 1000) * 1000 * 1000;
-      rv = net_mod_socket_sub_timeout(gNetmod_socket, topics_buf, strlen(topics_buf) + 1, sec, nsec); 
+      rv = net_mod_socket_sub_timeout(gNetmod_socket, topics_buf, count, sec, nsec); 
 
     } else if (timeout_ms == 0) {
     
-      rv = net_mod_socket_sub_nowait(gNetmod_socket, topics_buf, strlen(topics_buf) + 1);
+      rv = net_mod_socket_sub_nowait(gNetmod_socket, topics_buf, count);
     
     } else {
     
-      rv = net_mod_socket_sub(gNetmod_socket, topics_buf, strlen(topics_buf) + 1);
+      rv = net_mod_socket_sub(gNetmod_socket, topics_buf, count);
     
     }
    
@@ -1115,8 +1121,6 @@
     memcpy(*proc_id, topics_buf, *proc_id_len);
     
 #endif 
-
-    pthread_mutex_unlock(&mutex);
 
   } else {
 

--
Gitblit v1.8.0