From 0cc00936da93b7003b882c58af01c1345f9cac38 Mon Sep 17 00:00:00 2001 From: Fu Juntang <StrongTiger_001@163.com> Date: 星期一, 13 九月 2021 13:39:28 +0800 Subject: [PATCH] Remove the mutex lock. --- src/bh_api.cpp | 667 +++++++++++++++++++++++-------------------------------- 1 files changed, 279 insertions(+), 388 deletions(-) diff --git a/src/bh_api.cpp b/src/bh_api.cpp index d25bf8a..73c7772 100644 --- a/src/bh_api.cpp +++ b/src/bh_api.cpp @@ -347,60 +347,46 @@ return false; } - rv = pthread_mutex_trylock(&mutex); - if (rv == 0) { - - topics_buf = (char *)malloc(total); - if (topics_buf == NULL) { - - rv = EBUS_NO_MEM; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - logger->error("in BHRegisterTopics: Out of memory!\n"); - - pthread_mutex_unlock(&mutex); - - return false; - } - memset(topics_buf, 0x00, total); - -#if defined(PRO_DE_SERIALIZE) - for (i = 0; i < _input.amount; i++) { - - len = strlen(_input.topics[i]); - strncpy(topics_buf + count, _input.topics[i], len); - - count += len; - - if ((_input.amount > 1) && (i < (_input.amount - 1))) { - strncpy(topics_buf + count, STR_MAGIC, strlen(STR_MAGIC)); - - count++; - } - } - -#else - memcpy(topics_buf, topics, topics_len); - count = topics_len; -#endif - - 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); - - } else { - rv = EBUS_RES_BUSY; + topics_buf = (char *)malloc(total); + if (topics_buf == NULL) { + + rv = EBUS_NO_MEM; memset(errString, 0x00, sizeof(errString)); strncpy(errString, bus_strerror(rv), sizeof(errString)); + logger->error("in BHRegisterTopics: Out of memory!\n"); + return false; } + memset(topics_buf, 0x00, total); +#if defined(PRO_DE_SERIALIZE) + for (i = 0; i < _input.amount; i++) { + + len = strlen(_input.topics[i]); + strncpy(topics_buf + count, _input.topics[i], len); + + count += len; + + if ((_input.amount > 1) && (i < (_input.amount - 1))) { + strncpy(topics_buf + count, STR_MAGIC, strlen(STR_MAGIC)); + + count++; + } + } + +#else + memcpy(topics_buf, topics, topics_len); + count = topics_len; +#endif + + 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); + #if defined(PRO_DE_SERIALIZE) ::bhome_msg::MsgCommonReply mcr; mcr.mutable_errmsg()->set_errcode(::bhome_msg::ErrorCode(rv)); @@ -481,33 +467,19 @@ return false; } - rv = pthread_mutex_trylock(&mutex); - if (rv == 0) { - #if defined(PRO_DE_SERIALIZE) - min = (strlen(_input1) > (MAX_STR_LEN - 1) ? (MAX_STR_LEN - 1) : strlen(_input1)); - strncpy(topics_buf, _input1, min); + min = (strlen(_input1) > (MAX_STR_LEN - 1) ? (MAX_STR_LEN - 1) : strlen(_input1)); + strncpy(topics_buf, _input1, min); #else - min = (topic_len > (MAX_STR_LEN - 1) ? (MAX_STR_LEN - 1) : topic_len); - buf = const_cast<void *>(topic); - strncpy(topics_buf, (const char *)buf, min); + min = (topic_len > (MAX_STR_LEN - 1) ? (MAX_STR_LEN - 1) : topic_len); + buf = const_cast<void *>(topic); + strncpy(topics_buf, (const char *)buf, min); #endif - 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)); - - pthread_mutex_unlock(&mutex); + 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)); - } else { - - rv = EBUS_RES_BUSY; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - return false; - } - #if defined(PRO_DE_SERIALIZE) struct _MsgQueryTopicReply @@ -632,28 +604,14 @@ return false; } - rv = pthread_mutex_trylock(&mutex); - if (rv == 0) { - - if (query != NULL) { - strncpy(data_buf, (char *)query, (sizeof(data_buf) - 1) > query_len ? query_len : (sizeof(data_buf) - 1)); - } - - rv = net_mod_socket_reg(gNetmod_socket, data_buf, strlen(data_buf), &buf, &size, timeout_ms, PROC_QUE_ATCS); - - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - pthread_mutex_unlock(&mutex); - - } else { - - rv = EBUS_RES_BUSY; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - return false; + if (query != NULL) { + strncpy(data_buf, (char *)query, (sizeof(data_buf) - 1) > query_len ? query_len : (sizeof(data_buf) - 1)); } + + rv = net_mod_socket_reg(gNetmod_socket, data_buf, strlen(data_buf), &buf, &size, timeout_ms, PROC_QUE_ATCS); + + memset(errString, 0x00, sizeof(errString)); + strncpy(errString, bus_strerror(rv), sizeof(errString)); #if defined(PRO_DE_SERIALIZE) struct _MsgQueryProcReply @@ -799,74 +757,59 @@ return false; } - - rv = pthread_mutex_trylock(&mutex); - if (rv == 0) { - - topics_buf = (char *)malloc(total); - if (topics_buf == NULL) { - - rv = EBUS_NO_MEM; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - logger->error("in BHSubscribeTopics: Out of memory!\n"); - pthread_mutex_unlock(&mutex); - - return false; - } - memset(topics_buf, 0x00, total); - -#if defined(PRO_DE_SERIALIZE) - for (i = 0; i < _input.amount; i++) { - len = strlen(_input.topics[i]); - strncpy(topics_buf + count, _input.topics[i], len); - - count += len; - - if ((_input.amount > 1) && (i < (_input.amount - 1))) { - strncpy(topics_buf + count, STR_MAGIC, strlen(STR_MAGIC)); - - count++; - } - } - -#else - memcpy(topics_buf, topics, topics_len); - count = topics_len; -#endif - - if (timeout_ms > 0) { + topics_buf = (char *)malloc(total); + if (topics_buf == NULL) { - sec = timeout_ms / 1000; - nsec = (timeout_ms - sec * 1000) * 1000 * 1000; - 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, count); - - } else { - - rv = net_mod_socket_sub(gNetmod_socket, topics_buf, count); - - } - - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - free(topics_buf); - pthread_mutex_unlock(&mutex); - - } else { - - rv = EBUS_RES_BUSY; + rv = EBUS_NO_MEM; memset(errString, 0x00, sizeof(errString)); strncpy(errString, bus_strerror(rv), sizeof(errString)); + logger->error("in BHSubscribeTopics: Out of memory!\n"); + return false; } + memset(topics_buf, 0x00, total); + +#if defined(PRO_DE_SERIALIZE) + for (i = 0; i < _input.amount; i++) { + len = strlen(_input.topics[i]); + strncpy(topics_buf + count, _input.topics[i], len); + + count += len; + + if ((_input.amount > 1) && (i < (_input.amount - 1))) { + strncpy(topics_buf + count, STR_MAGIC, strlen(STR_MAGIC)); + + count++; + } + } + +#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, count, sec, nsec); + + } else if (timeout_ms == 0) { + + rv = net_mod_socket_sub_nowait(gNetmod_socket, topics_buf, count); + + } else { + + rv = net_mod_socket_sub(gNetmod_socket, topics_buf, count); + + } + + memset(errString, 0x00, sizeof(errString)); + strncpy(errString, bus_strerror(rv), sizeof(errString)); + + free(topics_buf); #if defined(PRO_DE_SERIALIZE) ::bhome_msg::MsgCommonReply mcr; @@ -997,46 +940,35 @@ return false; } - - rv = pthread_mutex_trylock(&mutex); - if (rv == 0) { + #if defined(PRO_DE_SERIALIZE) - if (timeout_ms > 0) { - rv = net_mod_socket_pub_timeout(gNetmod_socket, &node_arr, node_arr_len, _input.topic, strlen(_input.topic), _input.data, strlen(_input.data), timeout_ms); - } else if (timeout_ms == 0) { - rv = net_mod_socket_pub_nowait(gNetmod_socket, &node_arr, node_arr_len, _input.topic, strlen(_input.topic), _input.data, strlen(_input.data)); - - } else { - - rv = net_mod_socket_pub(gNetmod_socket, &node_arr, node_arr_len, _input.topic, strlen(_input.topic), _input.data, strlen(_input.data)); - } -#else - if (timeout_ms > 0) { - rv = net_mod_socket_pub_timeout(gNetmod_socket, &node_arr, node_arr_len, topic, strlen(topic), content, strlen(content), timeout_ms); - - } else if (timeout_ms == 0) { - rv = net_mod_socket_pub_nowait(gNetmod_socket, &node_arr, node_arr_len, topic, strlen(topic), content, strlen(content)); + if (timeout_ms > 0) { + rv = net_mod_socket_pub_timeout(gNetmod_socket, &node_arr, node_arr_len, _input.topic, strlen(_input.topic), _input.data, strlen(_input.data), timeout_ms); + } else if (timeout_ms == 0) { + rv = net_mod_socket_pub_nowait(gNetmod_socket, &node_arr, node_arr_len, _input.topic, strlen(_input.topic), _input.data, strlen(_input.data)); - } else { - rv = net_mod_socket_pub(gNetmod_socket, &node_arr, node_arr_len, topic, strlen(topic), content, strlen(content)); - } + } else { + + rv = net_mod_socket_pub(gNetmod_socket, &node_arr, node_arr_len, _input.topic, strlen(_input.topic), _input.data, strlen(_input.data)); + } +#else + if (timeout_ms > 0) { + rv = net_mod_socket_pub_timeout(gNetmod_socket, &node_arr, node_arr_len, topic, strlen(topic), content, strlen(content), timeout_ms); + + } else if (timeout_ms == 0) { + rv = net_mod_socket_pub_nowait(gNetmod_socket, &node_arr, node_arr_len, topic, strlen(topic), content, strlen(content)); + + } else { + rv = net_mod_socket_pub(gNetmod_socket, &node_arr, node_arr_len, topic, strlen(topic), content, strlen(content)); + } #endif - pthread_mutex_unlock(&mutex); - - if (rv > 0) - return true; - - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - } else { - - rv = EBUS_RES_BUSY; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - } - + if (rv > 0) + return true; + + memset(errString, 0x00, sizeof(errString)); + strncpy(errString, bus_strerror(rv), sizeof(errString)); + return false; } @@ -1107,8 +1039,6 @@ strncpy(errString, bus_strerror(rv), sizeof(errString)); logger->error("in BHRequest: Out of memory!\n"); - - pthread_mutex_unlock(&mutex); return false; } @@ -1128,7 +1058,6 @@ logger->error("in BHRequest: Out of memory!\n"); free(topics_buf); - pthread_mutex_unlock(&mutex); return false; } @@ -1274,90 +1203,78 @@ return false; } - rv = pthread_mutex_trylock(&mutex); - if (rv == 0) { #if defined(PRO_DE_SERIALIZE) - strncpy(buf_temp, _input1.topic, (sizeof(buf_temp) - 1) > strlen(_input1.topic) ? strlen(_input1.topic) : (sizeof(buf_temp) - 1)); + strncpy(buf_temp, _input1.topic, (sizeof(buf_temp) - 1) > strlen(_input1.topic) ? strlen(_input1.topic) : (sizeof(buf_temp) - 1)); #else - strncpy(buf_temp, (char *)request, (sizeof(buf_temp) - 1) > strlen((char *)request) ? strlen((char *)request) : (sizeof(buf_temp) - 1)); + strncpy(buf_temp, (char *)request, (sizeof(buf_temp) - 1) > strlen((char *)request) ? strlen((char *)request) : (sizeof(buf_temp) - 1)); #endif - - rv = net_mod_socket_reg(gNetmod_socket, buf_temp, strlen(buf_temp), &buf, &size, timeout_ms, PROC_QUE_STCS); - if (rv == 0) { + + rv = net_mod_socket_reg(gNetmod_socket, buf_temp, strlen(buf_temp), &buf, &size, timeout_ms, PROC_QUE_STCS); + if (rv == 0) { - val = atoi((char *)buf); + val = atoi((char *)buf); - free(buf); + free(buf); - if (val > 0) { + if (val > 0) { - len = strlen(buf_temp) + 1; + len = strlen(buf_temp) + 1; #if defined(PRO_DE_SERIALIZE) - len += strlen(_input1.data); + len += strlen(_input1.data); #endif - topics_buf = (char *)malloc(len); - if (topics_buf == NULL) { - - rv = EBUS_NO_MEM; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - logger->error("in BHRequest: Out of memory!\n"); - - pthread_mutex_unlock(&mutex); - - return false; - } - memset(topics_buf, 0x00, len); + topics_buf = (char *)malloc(len); + if (topics_buf == NULL) { - strncpy(topics_buf, buf_temp, strlen(buf_temp) + 1); + rv = EBUS_NO_MEM; + memset(errString, 0x00, sizeof(errString)); + strncpy(errString, bus_strerror(rv), sizeof(errString)); + + logger->error("in BHRequest: Out of memory!\n"); + + return false; + } + memset(topics_buf, 0x00, len); + + strncpy(topics_buf, buf_temp, strlen(buf_temp) + 1); #if defined(PRO_DE_SERIALIZE) - strncpy(topics_buf + strlen(buf_temp) + 1, _input1.data, strlen(_input1.data)); + strncpy(topics_buf + strlen(buf_temp) + 1, _input1.data, strlen(_input1.data)); #endif - data = net_mod_socket_svr_get(gNetmod_socket); - if (timeout_ms > 0) { + data = net_mod_socket_svr_get(gNetmod_socket); + if (timeout_ms > 0) { - sec = timeout_ms / 1000; - nsec = (timeout_ms - sec * 1000) * 1000 * 1000; - - rv = net_mod_socket_sendto_timeout(gNetmod_socket, topics_buf, len, val, sec, nsec, SVR_STR, data); - - } else if (timeout_ms == 0) { - - rv = net_mod_socket_sendto_nowait(gNetmod_socket, topics_buf, len, val, SVR_STR, data); - - } else { - - rv = net_mod_socket_sendto(gNetmod_socket, topics_buf, len, val, SVR_STR, data); - } - - free(topics_buf); + sec = timeout_ms / 1000; + nsec = (timeout_ms - sec * 1000) * 1000 * 1000; + rv = net_mod_socket_sendto_timeout(gNetmod_socket, topics_buf, len, val, sec, nsec, SVR_STR, data); + + } else if (timeout_ms == 0) { + + rv = net_mod_socket_sendto_nowait(gNetmod_socket, topics_buf, len, val, SVR_STR, data); + } else { - rv = EBUS_RES_UNSUPPORT; - - } - } + rv = net_mod_socket_sendto(gNetmod_socket, topics_buf, len, val, SVR_STR, data); + } - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - pthread_mutex_unlock(&mutex); - - if((msg_id == NULL) || (msg_id_len == NULL)) { - if (rv == 0) - return true; + free(topics_buf); - return false; - } - } else { + } else { - rv = EBUS_RES_BUSY; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); + rv = EBUS_RES_UNSUPPORT; + + } + } + + memset(errString, 0x00, sizeof(errString)); + strncpy(errString, bus_strerror(rv), sizeof(errString)); + + if((msg_id == NULL) || (msg_id_len == NULL)) { + if (rv == 0) + return true; + + return false; } if (rv == 0) { @@ -1455,116 +1372,29 @@ return false; } - rv = pthread_mutex_trylock(&mutex); - if (rv == 0) { #if defined(PRO_DE_SERIALIZE) - strncpy(buf_temp, _input1.topic, (sizeof(buf_temp) - 1) > strlen(_input1.topic) ? strlen(_input1.topic) : (sizeof(buf_temp) - 1)); + strncpy(buf_temp, _input1.topic, (sizeof(buf_temp) - 1) > strlen(_input1.topic) ? strlen(_input1.topic) : (sizeof(buf_temp) - 1)); #else - strncpy(buf_temp, (char *)request, (sizeof(buf_temp) - 1) > request_len ? request_len : (sizeof(buf_temp) - 1)); + strncpy(buf_temp, (char *)request, (sizeof(buf_temp) - 1) > request_len ? request_len : (sizeof(buf_temp) - 1)); #endif + + rv = net_mod_socket_reg(gNetmod_socket, buf_temp, strlen(buf_temp), &buf, &size, timeout_ms, PROC_QUE_STCS); + if (rv == 0) { - rv = net_mod_socket_reg(gNetmod_socket, buf_temp, strlen(buf_temp), &buf, &size, timeout_ms, PROC_QUE_STCS); - if (rv == 0) { + val = atoi((char *)buf); + + free(buf); + + if (val > 0) { + memset(&node, 0x00, sizeof(node)); - val = atoi((char *)buf); - - free(buf); - - if (val > 0) { - memset(&node, 0x00, sizeof(node)); - - len = strlen(buf_temp) + 1; + len = strlen(buf_temp) + 1; #if defined(PRO_DE_SERIALIZE) - len += strlen(_input1.data); + len += strlen(_input1.data); #endif - data = net_mod_socket_svr_get(gNetmod_socket); - topics_buf = (char *)malloc(len); - if (topics_buf == NULL) { - - rv = EBUS_NO_MEM; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - logger->error("in BHRequest: Out of memory!\n"); - - pthread_mutex_unlock(&mutex); - - return false; - } - memset(topics_buf, 0x00, len); - - strncpy(topics_buf, buf_temp, strlen(buf_temp) + 1); -#if defined(PRO_DE_SERIALIZE) - strncpy(topics_buf + strlen(buf_temp) + 1, _input1.data, strlen(_input1.data)); -#endif - - node.key = val; - - if (timeout_ms > 0) { - - rv = net_mod_socket_sendandrecv_timeout(gNetmod_socket, &node, 1, topics_buf, len, &recv_arr, &recv_arr_size, &errarr, &errarr_size, timeout_ms); - - } else if (timeout_ms == 0) { - - rv = net_mod_socket_sendandrecv_nowait(gNetmod_socket, &node, 1, topics_buf, len, &recv_arr, &recv_arr_size, &errarr, &errarr_size); - - } else { - - rv = net_mod_socket_sendandrecv(gNetmod_socket, &node, 1, topics_buf, len, &recv_arr, &recv_arr_size, &errarr, &errarr_size); - } - if (rv > 0) { - if (recv_arr_size > 0) { - - node.key = recv_arr[0].key; - - size = recv_arr[0].content_length; - buf = (char *)malloc(size); - if (buf == NULL) { - printf("Out of memory\n"); - - exit(0); - } - memset((char *)buf, 0x00, size); - - strncpy((char *)buf, (char *)recv_arr[0].content, size); - - } - - net_mod_socket_free_recv_msg_arr(recv_arr, recv_arr_size); - - if(errarr_size > 0) { - free(errarr); - } - - rv = 0; - - } else { - rv = EBUS_TIMEOUT; - } - - } else { - rv = EBUS_RES_UNSUPPORT; - } - - free(topics_buf); - } - - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - if (rv == 0) { - if ((proc_id != NULL) && (proc_id_len != NULL)) { - memset(buf_temp, 0x00, sizeof(buf_temp)); - sprintf(buf_temp, "%d", node.key); - - rr.proc_id = buf_temp; - *proc_id_len = rr.proc_id.size(); - *proc_id = malloc(*proc_id_len); - memcpy(*proc_id, rr.proc_id.c_str(), *proc_id_len); - } - - topics_buf = (char *)malloc(size + 10); + data = net_mod_socket_svr_get(gNetmod_socket); + topics_buf = (char *)malloc(len); if (topics_buf == NULL) { rv = EBUS_NO_MEM; @@ -1573,26 +1403,98 @@ logger->error("in BHRequest: Out of memory!\n"); - pthread_mutex_unlock(&mutex); - return false; } - memset(topics_buf, 0x00, size + 10); + memset(topics_buf, 0x00, len); - memcpy(topics_buf, buf, size); - rr.data = topics_buf; - - free(buf); - free(topics_buf); - } - - pthread_mutex_unlock(&mutex); + strncpy(topics_buf, buf_temp, strlen(buf_temp) + 1); +#if defined(PRO_DE_SERIALIZE) + strncpy(topics_buf + strlen(buf_temp) + 1, _input1.data, strlen(_input1.data)); +#endif - } else { - - rv = EBUS_RES_BUSY; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); + node.key = val; + + if (timeout_ms > 0) { + + rv = net_mod_socket_sendandrecv_timeout(gNetmod_socket, &node, 1, topics_buf, len, &recv_arr, &recv_arr_size, &errarr, &errarr_size, timeout_ms); + + } else if (timeout_ms == 0) { + + rv = net_mod_socket_sendandrecv_nowait(gNetmod_socket, &node, 1, topics_buf, len, &recv_arr, &recv_arr_size, &errarr, &errarr_size); + + } else { + + rv = net_mod_socket_sendandrecv(gNetmod_socket, &node, 1, topics_buf, len, &recv_arr, &recv_arr_size, &errarr, &errarr_size); + } + if (rv > 0) { + if (recv_arr_size > 0) { + + node.key = recv_arr[0].key; + + size = recv_arr[0].content_length; + buf = (char *)malloc(size); + if (buf == NULL) { + printf("Out of memory\n"); + + exit(0); + } + memset((char *)buf, 0x00, size); + + strncpy((char *)buf, (char *)recv_arr[0].content, size); + + } + + net_mod_socket_free_recv_msg_arr(recv_arr, recv_arr_size); + + if(errarr_size > 0) { + free(errarr); + } + + rv = 0; + + } else { + rv = EBUS_TIMEOUT; + } + + } else { + rv = EBUS_RES_UNSUPPORT; + } + + free(topics_buf); + } + + memset(errString, 0x00, sizeof(errString)); + strncpy(errString, bus_strerror(rv), sizeof(errString)); + + if (rv == 0) { + if ((proc_id != NULL) && (proc_id_len != NULL)) { + memset(buf_temp, 0x00, sizeof(buf_temp)); + sprintf(buf_temp, "%d", node.key); + + rr.proc_id = buf_temp; + *proc_id_len = rr.proc_id.size(); + *proc_id = malloc(*proc_id_len); + memcpy(*proc_id, rr.proc_id.c_str(), *proc_id_len); + } + + topics_buf = (char *)malloc(size + 10); + if (topics_buf == NULL) { + + rv = EBUS_NO_MEM; + memset(errString, 0x00, sizeof(errString)); + strncpy(errString, bus_strerror(rv), sizeof(errString)); + + logger->error("in BHRequest: Out of memory!\n"); + + return false; + } + memset(topics_buf, 0x00, size + 10); + + memcpy(topics_buf, buf, size); + rr.data = topics_buf; + + free(buf); + free(topics_buf); } #if defined(PRO_DE_SERIALIZE) @@ -1787,22 +1689,11 @@ return false; } - rv = pthread_mutex_trylock(&mutex); - if (rv == 0) { + data = net_mod_socket_svr_get(gNetmod_socket); + rv = net_mod_socket_sendto(gNetmod_socket, _input, strlen(_input), *(int *)src, SVR_STR, data); - data = net_mod_socket_svr_get(gNetmod_socket); - rv = net_mod_socket_sendto(gNetmod_socket, _input, strlen(_input), *(int *)src, SVR_STR, data); - - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - - pthread_mutex_unlock(&mutex); - } else { - - rv = EBUS_RES_BUSY; - memset(errString, 0x00, sizeof(errString)); - strncpy(errString, bus_strerror(rv), sizeof(errString)); - } + memset(errString, 0x00, sizeof(errString)); + strncpy(errString, bus_strerror(rv), sizeof(errString)); if (rv == 0) return true; -- Gitblit v1.8.0