From 578e15c276d72bfbdd707c6c948824daa43d3780 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期四, 18 一月 2024 14:18:35 +0800
Subject: [PATCH] less memory
---
src/socket/shm_socket.cpp | 39 +++++++++++++++++++--------------------
1 files changed, 19 insertions(+), 20 deletions(-)
diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index 709505f..a6b6f93 100644
--- a/src/socket/shm_socket.cpp
+++ b/src/socket/shm_socket.cpp
@@ -2,10 +2,12 @@
#include "socket_def.h"
#include "hashtable.h"
#include "logger_factory.h"
+#include "net_mod_socket_wrapper.h"
#include <map>
#include <cassert>
#include "bus_error.h"
#include "sole.h"
+#include "bh_api.h"
#include "shm_mm.h"
#include "key_def.h"
@@ -105,9 +107,6 @@
static int _shm_socket_close_(shm_socket_t *sockt) {
-
- int rv, i;
- hashtable_t *hashtable = mm_get_hashtable();
// if(sockt->key != 0) {
// auto it = shmQueueStMap->find(sockt->key);
@@ -117,18 +116,6 @@
// }
// }
- if(sockt->queue != NULL) {
- sockt->queue->close();
- for( i = 0; i < sockt->queue->size(); i++) {
- mm_free((*(sockt->queue))[i].buf);
- logger->info("======= %d free queue element buf\n", sockt->key);
- }
- sleep(1);
-
- hashtable_remove(hashtable, sockt->key);
- // sockt->queue = NULL;
- }
-
pthread_mutex_destroy(&(sockt->mutex) );
free(sockt);
return 0;
@@ -404,13 +391,16 @@
const int send_size, const int key, void **recv_buf,
int *recv_size, const struct timespec *timeout, int flags) {
-
+ int data;
+ int timeout_ms;
+ char data_buf[MAX_STR_LEN] = { 0x00 };
int rv = 0, tryn = 16;
shm_packet_t sendpak;
shm_packet_t recvpak;
std::map<int, shm_packet_t>::iterator recvbufIter;
shm_socket_t *tmp_socket = NULL;
-
+ hashtable_t *hashtable = mm_get_hashtable();
+
rv = pthread_once(&_once_, _create_threadlocal_socket_key_);
if (rv != 0) {
logger->error(rv, "shm_sendandrecv pthread_once");
@@ -421,14 +411,22 @@
if (tmp_socket == NULL)
{
tmp_socket = shm_socket_open(SHM_SOCKET_DGRAM);
-
+
+ tmp_socket->key = hashtable_alloc_key(hashtable);
+ data = inter_key_get();
+ timeout_ms = timeout->tv_sec * 1000 + 3000;
+ sprintf(data_buf, "%d, %d", data, tmp_socket->key);
+ if (socket_data_get() != NULL) {
+ net_mod_socket_reg(socket_data_get(), data_buf, strlen(data_buf), NULL, 0, timeout_ms, PROC_REG_BUF);
+ }
+
rv = pthread_setspecific(_localthread_socket_key_, tmp_socket);
if ( rv != 0) {
logger->error(rv, "shm_sendandrecv : pthread_setspecific");
exit(1);
}
}
-
+
sendpak.key = tmp_socket->key;
sendpak.size = send_size;
if(send_buf != NULL) {
@@ -564,6 +562,7 @@
if (sockt->key == 0) {
sockt->key = hashtable_alloc_key(hashtable);
}
+
sockt->queue = shm_socket_bind_queue( sockt->key, sockt->force_bind);
if(sockt->queue == NULL ) {
logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sockt->key);
@@ -729,7 +728,7 @@
count += strlen(ptr->int_info) + 1;
memcpy(dst + count, ptr->svr_info, strlen(ptr->svr_info) + 1);
count += strlen(ptr->svr_info) + 1;
-
+
*counter = count;
}
--
Gitblit v1.8.0