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_proxy_start.cpp | 77 +++++++++++++++++++++++++++++++++++---
1 files changed, 71 insertions(+), 6 deletions(-)
diff --git a/src/bus_proxy_start.cpp b/src/bus_proxy_start.cpp
index a04edad..6029e6e 100644
--- a/src/bus_proxy_start.cpp
+++ b/src/bus_proxy_start.cpp
@@ -10,10 +10,16 @@
#include <errno.h>
#include <getopt.h>
#include <stdlib.h>
+#include "proc_def.h"
+#include "msg_mgr.h"
+
+using namespace std;
#define SVR_PORT 5000
-#define TOTAL_THREADS 2
+#define TOTAL_THREADS 3
+
+#define MAX_RETRIES 3
static void *gBusServer_socket = NULL;
static void *gServer_socket = NULL;
@@ -24,8 +30,10 @@
static int gBusServer_act = 0;
static int gBusServer_stat = 0;
-pthread_t tids[2];
-void *res[2];
+pthread_t tids[TOTAL_THREADS];
+void *res[TOTAL_THREADS];
+
+extern list gLinkedList;
void *bus_start(void *skptr) {
@@ -39,15 +47,64 @@
return NULL;
}
-
-
-
void *svr_start(void *skptr) {
int port = *(int *)skptr;
gServer_socket = net_mod_server_socket_open(port);
if(net_mod_server_socket_start(gServer_socket) != 0) {
printf("start net mod server failed\n");
+ }
+
+ return NULL;
+}
+
+void *check_start(void *skptr) {
+ int i;
+ int ret;
+ int val;
+ int thres;
+ int data;
+ int data_ret;
+ int total;
+ void *buf;
+ int size;
+ char buf_temp[MAX_STR_LEN] = { 0x00 };
+
+ struct timespec timeout = {.tv_sec = 3, .tv_nsec = 0};
+
+ while(true) {
+ total = gLinkedList.NodeNum();
+ for (i = 0; i < total; i++) {
+
+ val = gLinkedList.nodeGet(i);
+ if (val > 0) {
+ data_ret = bus_server_socket_wrapper_data_get(gBusServer_socket, val);
+ thres = gLinkedList.dataGet(val);
+ if ((data_ret == true) && (thres < MAX_RETRIES)) {
+
+ data = gLinkedList.dataFixGet(val);
+ sprintf(buf_temp, "%d", i + 1);
+ ret = bus_server_socket_wrapper_proc_check(gBusServer_socket, data, buf_temp, strlen(buf_temp), &buf, &size, &timeout, BUS_TIMEOUT_FLAG);
+ if (ret == 0) {
+ gLinkedList.dataSet(val, 0x00);
+
+ free(buf);
+ } else {
+
+ gLinkedList.dataSet(val, ++thres);
+ }
+
+ } else {
+
+ gLinkedList.Delete(val);
+ if (thres >= MAX_RETRIES) {
+ bus_server_socket_wrapper_proc_release(gBusServer_socket, val);
+ }
+ }
+ }
+ }
+
+ sleep(WT_INT);
}
return NULL;
@@ -93,6 +150,10 @@
}
}
+#if defined(MSG_HANDLER)
+ msg_init();
+#endif
+
if (gShm_size == -1) {
gShm_size = SHM_RES_SIZE;
}
@@ -110,6 +171,10 @@
if (gBusServer_stat >= 0) {
pthread_create(&tids[1], NULL, svr_start, (void *)&gPort);
+
+ pthread_create(&tids[2], NULL, check_start, NULL);
+
+ //pthread_create(&tids[3], NULL, sem_msg_handler, NULL);
}
for (i = 0; i< TOTAL_THREADS; i++) {
--
Gitblit v1.8.0