[Feature][T8TSK-189] fix multi init in one process
Change-Id: If816876232ffa83260e5706173dcd6bfa30ffd4c
diff --git a/src/lynq/lib/liblynq-call/lynq_module_socket.cpp b/src/lynq/lib/liblynq-call/lynq_module_socket.cpp
index 2d5b0e8..792b312 100755
--- a/src/lynq/lib/liblynq-call/lynq_module_socket.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_module_socket.cpp
@@ -55,7 +55,7 @@
struct sockaddr_in module_rc_addr_serv;
//struct sockaddr_in module_urc_addr_serv;
static int module_rc_sock_fd = -1;
-//static int module_urc_sock_fd = -1;
+static int module_urc_sock_fd = -1;
int module_urc_status = 1;
int module_rc_status = 1;
pthread_t module_urc_tid = -1;
@@ -328,7 +328,7 @@
{
bzero(urc_data,LYNQ_REC_BUF);
//res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);
- res = lynq_recv_urc_msg(urc_data,sizeof(urc_data));
+ res = lynq_recv_urc_msg(module_urc_sock_fd, urc_data,sizeof(urc_data));
if(res<sizeof(int32_t)*2)
{
LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
@@ -492,7 +492,13 @@
// }
// return RESULT_OK;
- return lynq_register_urc_socket() > 0 ? RESULT_OK : RESULT_ERROR;
+ module_urc_sock_fd = lynq_register_urc_socket();
+ if (module_urc_sock_fd <= 0)
+ {
+ module_urc_sock_fd = -1;
+ return RESULT_ERROR;
+ }
+ return RESULT_OK;
}
void lynq_close_urc_socket()
@@ -502,6 +508,8 @@
// close(module_urc_sock_fd);
// module_urc_sock_fd =-1;
// }
+ lynq_unregister_urc_socket(module_urc_sock_fd);
+ module_urc_sock_fd = -1;
}
int lynq_start_all_urc_socket_thread()
diff --git a/src/lynq/lib/liblynq-data/lynq_data_urc.cpp b/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
index d527ed2..9c6ad71 100755
--- a/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
@@ -78,7 +78,7 @@
{
bzero(urc_data,LYNQ_REC_BUF);
// res = recvfrom(lynq_urc_sockfd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&urc_local_addr,(socklen_t*)&lynq_len_urc_addr_serv);
- res = lynq_recv_urc_msg(urc_data,sizeof(urc_data));
+ res = lynq_recv_urc_msg(lynq_urc_sockfd, urc_data,sizeof(urc_data));
if(res<sizeof(int32_t)*2)
{
@@ -198,16 +198,24 @@
// return -1;
// }
// return 0;
- return lynq_register_urc_socket() > 0 ? 0 : -1;
+ lynq_urc_sockfd = lynq_register_urc_socket();
+ if (lynq_urc_sockfd <= 0)
+ {
+ lynq_urc_sockfd = -1;
+ return -1;
+ }
+ return 0;
}
int lynq_socket_recv_stop()
{
- if (lynq_urc_sockfd >=0)
- {
- close(lynq_urc_sockfd);
- lynq_urc_sockfd = -1;
- }
+// if (lynq_urc_sockfd >=0)
+// {
+// close(lynq_urc_sockfd);
+// lynq_urc_sockfd = -1;
+// }
+ lynq_unregister_urc_socket(lynq_urc_sockfd);
+ lynq_urc_sockfd = -1;
return 0;
}
diff --git a/src/lynq/lib/liblynq-network/lynq_module_socket.cpp b/src/lynq/lib/liblynq-network/lynq_module_socket.cpp
index 48353dc..de76578 100755
--- a/src/lynq/lib/liblynq-network/lynq_module_socket.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_module_socket.cpp
@@ -55,7 +55,7 @@
struct sockaddr_in module_rc_addr_serv;
//struct sockaddr_in module_urc_addr_serv;
static int module_rc_sock_fd = -1;
-//static int module_urc_sock_fd = -1;
+static int module_urc_sock_fd = -1;
int module_urc_status = 1;
int module_rc_status = 1;
pthread_t module_urc_tid = -1;
@@ -328,7 +328,7 @@
{
bzero(urc_data,LYNQ_REC_BUF);
//res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);
- res = lynq_recv_urc_msg(urc_data,sizeof(urc_data));
+ res = lynq_recv_urc_msg(module_urc_sock_fd, urc_data,sizeof(urc_data));
if(res<sizeof(int32_t)*2)
{
LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
@@ -491,7 +491,13 @@
// return RESULT_ERROR;
// }
// return RESULT_OK;
- return lynq_register_urc_socket() > 0 ? RESULT_OK : RESULT_ERROR;
+ module_urc_sock_fd = lynq_register_urc_socket();
+ if (module_urc_sock_fd <= 0)
+ {
+ module_urc_sock_fd = -1;
+ return RESULT_ERROR;
+ }
+ return RESULT_OK;
}
void lynq_close_urc_socket()
@@ -501,6 +507,8 @@
// close(module_urc_sock_fd);
// module_urc_sock_fd =-1;
// }
+ lynq_unregister_urc_socket(module_urc_sock_fd);
+ module_urc_sock_fd = -1;
}
int lynq_start_all_urc_socket_thread()
diff --git a/src/lynq/lib/liblynq-shm/include/lynq_urc_socket.h b/src/lynq/lib/liblynq-shm/include/lynq_urc_socket.h
index 866d5c2..1bd12bb 100755
--- a/src/lynq/lib/liblynq-shm/include/lynq_urc_socket.h
+++ b/src/lynq/lib/liblynq-shm/include/lynq_urc_socket.h
@@ -17,7 +17,8 @@
int lynq_open_broadcast_urc_socket();
int lynq_broadcast_urc_msg(void * msg, int size);
int lynq_register_urc_socket();
-int lynq_recv_urc_msg(void * buffer, int size);
+int lynq_unregister_urc_socket(int fd);
+int lynq_recv_urc_msg(int fd, void * buffer, int size);
#ifdef __cplusplus
}
#endif
diff --git a/src/lynq/lib/liblynq-shm/lynq_urc_socket.cpp b/src/lynq/lib/liblynq-shm/lynq_urc_socket.cpp
index 2ebf85f..acc7459 100755
--- a/src/lynq/lib/liblynq-shm/lynq_urc_socket.cpp
+++ b/src/lynq/lib/liblynq-shm/lynq_urc_socket.cpp
@@ -12,14 +12,15 @@
#include "lynq_urc_socket.h"
#include "log/log.h"
#include <list>
+#include <map>
static int lynq_urc_socket_fd = 0;
-static int registered_urc_socket_port = 0;
-static int registered_urc_socket_fd = 0;
static pthread_mutex_t s_urc_broadcast_mtx = PTHREAD_MUTEX_INITIALIZER;
static std::list<struct sockaddr*> s_urc_broadcast_clients;
+static std::map<int ,int> s_socket_port_map;
+
static pthread_mutex_t s_urc_register_mtx = PTHREAD_MUTEX_INITIALIZER;
#define LYNQ_URC_SERVER_LISTEN_PORT 8086
@@ -95,6 +96,8 @@
int ret = 0;
int len_s;
struct sockaddr_in addr_serv;
+ int registered_urc_socket_fd = -1;
+ int registered_urc_socket_port = -1;
//Creating a Socket object
pthread_mutex_lock(&s_urc_register_mtx);
registered_urc_socket_fd=socket(AF_INET,SOCK_DGRAM,0);
@@ -128,32 +131,57 @@
len_s = sendto(registered_urc_socket_fd, ®istered_urc_socket_port, sizeof(registered_urc_socket_port), 0, (struct sockaddr *)&addr_serv,sizeof(addr_serv));
printf("send result %d %d\n", len_s, errno);
register_socket_exit:
+ s_socket_port_map.insert(registered_urc_socket_fd, registered_urc_socket_port);
pthread_mutex_unlock(&s_urc_register_mtx);
printf("init result %d\n", ret);
return ret ==0 ? registered_urc_socket_fd : -1;
}
-int lynq_recv_urc_msg(void * buffer, int size)
+int lynq_unregister_urc_socket(int fd)
+{
+ pthread_mutex_lock(&s_urc_register_mtx);
+ auto it = s_socket_port_map.find(fd);
+ if (it != s_socket_port_map.end())
+ {
+ s_socket_port_map.erase(it);
+ }
+ pthread_mutex_unlock(&s_urc_register_mtx);
+ close(fd);
+ return 0;
+}
+
+int lynq_recv_urc_msg(int fd, void * buffer, int size)
{
int ret = 0;
struct sockaddr_in addr_serv;
socklen_t len_addr_serv = sizeof(addr_serv);
+ int registered_urc_socket_port = -1;
memset(&addr_serv, 0, sizeof(addr_serv));
- printf("client %ul to recv now\n", pthread_self());
- pthread_mutex_lock(&s_urc_register_mtx);
- if (registered_urc_socket_fd <= 0) {
- pthread_mutex_unlock(&s_urc_register_mtx);
+ if (fd <= 0) {
return -1;
}
+ printf("client %ul to recv now\n", pthread_self());
+ pthread_mutex_lock(&s_urc_register_mtx);
+ auto it = s_socket_port_map.find(fd);
+ if (it != s_socket_port_map.end())
+ {
+ registered_urc_socket_port = it->second;
+ }
+ pthread_mutex_unlock(&s_urc_register_mtx);
+ if (registered_urc_socket_port == -1)
+ {
+ return -1;
+ }
+
while(1)
{
memset(buffer, 0, 4);
- ret = recvfrom(registered_urc_socket_fd, buffer, size,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
+ ret = recvfrom(fd, buffer, size,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
if (ret > 0 && LYNQ_URC_SERVER_LISTEN_PORT == ntohs(addr_serv.sin_port))
{
- if (ret == 4 && LYNQ_URC_SERVER_LISTEN_PORT == *((int*)buffer))
+ if (ret == 4 && LYNQ_URC_SERVER_LISTEN_PORT == *((int*)buffer) && registered_urc_socket_port != -1)
{
- sendto(registered_urc_socket_fd, ®istered_urc_socket_port, sizeof(registered_urc_socket_port), 0, (struct sockaddr *)&addr_serv,sizeof(addr_serv));
+ sendto(fd, ®istered_urc_socket_port, sizeof(registered_urc_socket_port), 0, (struct sockaddr *)&addr_serv,sizeof(addr_serv));
printf("to send ack of headbeat\n");
continue;
}
@@ -165,7 +193,6 @@
}
break;
}
- pthread_mutex_unlock(&s_urc_register_mtx);
printf("client %ul recv %d\n", pthread_self(), ret);
return ret;
}
diff --git a/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp b/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
index 2f06cb4..7aeae34 100755
--- a/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
+++ b/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
@@ -55,7 +55,7 @@
struct sockaddr_in module_rc_addr_serv;
//struct sockaddr_in module_urc_addr_serv;
static int module_rc_sock_fd = -1;
-//static int module_urc_sock_fd = -1;
+static int module_urc_sock_fd = -1;
int module_urc_status = 1;
int module_rc_status = 1;
pthread_t module_urc_tid = -1;
@@ -326,7 +326,7 @@
{
bzero(urc_data,LYNQ_REC_BUF);
//res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);
- res = lynq_recv_urc_msg(urc_data,sizeof(urc_data));
+ res = lynq_recv_urc_msg(module_urc_sock_fd, urc_data,sizeof(urc_data));
if(res<sizeof(int32_t)*2)
{
LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
@@ -496,7 +496,13 @@
// return RESULT_ERROR;
// }
// return RESULT_OK;
- return lynq_register_urc_socket() > 0 ? RESULT_OK : RESULT_ERROR;
+ module_urc_sock_fd = lynq_register_urc_socket();
+ if (module_urc_sock_fd <= 0)
+ {
+ module_urc_sock_fd = -1;
+ return RESULT_ERROR;
+ }
+ return RESULT_OK;
}
void lynq_close_urc_socket()
@@ -506,6 +512,8 @@
// close(module_urc_sock_fd);
// module_urc_sock_fd =-1;
// }
+ lynq_unregister_urc_socket(module_urc_sock_fd);
+ module_urc_sock_fd = -1;
}
int lynq_start_all_urc_socket_thread()