From b90ba316b54db321d3e8aaac7df93b46d80b9d9c Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期二, 22 十二月 2020 15:47:41 +0800
Subject: [PATCH] 三个没有回收的信号
---
src/queue/mm.c | 16 +++++--
test/Makefile | 2
test_net_socket/test_net_mod_socket.c | 24 ++++++++++++
test/test.c | 35 +----------------
4 files changed, 39 insertions(+), 38 deletions(-)
diff --git a/src/queue/mm.c b/src/queue/mm.c
index 979cced..dc6f5be 100644
--- a/src/queue/mm.c
+++ b/src/queue/mm.c
@@ -310,7 +310,14 @@
if(shmctl(shmid, IPC_STAT, &shmid_ds) == 0) {
//LoggerFactory::getLogger()->debug("shm_nattch=%d\n", shmid_ds.shm_nattch);
// 鍙湁褰撳墠涓�涓繘绋媋ttach鍒板叡浜唴瀛樹笂
- if(shmid_ds.shm_nattch == 1) {
+ if (shmid_ds.shm_nattch > 1) {
+ //detache
+ if (shmdt(shmp) == -1) {
+ LoggerFactory::getLogger()->error(errno, "mm_destroy shmdt");
+ }
+ SemUtil::inc(mutex);
+ return false;
+ } else {
hashtable_destroy(hashtable);
//detache
@@ -326,14 +333,13 @@
else
LoggerFactory::getLogger()->debug("shared memory destroy\n");
+ LoggerFactory::getLogger()->debug(errno, "mm_destroy: real destroy.");
+
SemUtil::inc(mutex);
SemUtil::remove(mutex);
return true;
- } else {
- SemUtil::inc(mutex);
- return false;
- }
+ }
} else {
err_msg(errno, "mm_destroy shmctl IPC_STAT");
diff --git a/test/Makefile b/test/Makefile
index 7046699..f719401 100755
--- a/test/Makefile
+++ b/test/Makefile
@@ -13,7 +13,7 @@
INCLUDES += -I${DEST}/include/shmqueue -I$(ROOT)/include/usgcommon
-PROGS = ${DEST}/test test2
+PROGS = ${DEST}/test
DEPENDENCES = $(patsubst %, %.d, $(PROGS))
diff --git a/test/test.c b/test/test.c
index ab21287..40f5af7 100644
--- a/test/test.c
+++ b/test/test.c
@@ -1,39 +1,10 @@
#include "usg_common.h"
static void sig_quit(int);
+#define SIGCLOSE1 (SIGRTMIN +1)
int
main(void)
{
- sigset_t
- newmask, oldmask, pendmask;
- if (signal(SIGQUIT, sig_quit) == SIG_ERR)
- err_exit(errno, "can鈥檛 catch SIGQUIT");
- /*
- * Block SIGQUIT and save current signal mask.
- */
- sigemptyset(&newmask);
- sigaddset(&newmask, SIGQUIT);
- if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
- err_exit(errno, "SIG_BLOCK error");
- sleep(5);
- /* SIGQUIT here will remain pending */
- if (sigpending(&pendmask) < 0)
- err_exit(errno, "sigpending error");
- if (sigismember(&pendmask, SIGQUIT))
- printf("\nSIGQUIT pending\n");
- /*
- * Restore signal mask which unblocks SIGQUIT.
- */
- if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
- err_exit(errno, "SIG_SETMASK error");
- printf("SIGQUIT unblocked\n");
- sleep(5);
- exit(0);
+ printf("%d, %d , %d\n", SIGRTMIN, SIGRTMAX, SIGCLOSE1);
/* SIGQUIT here will terminate with core file */
}
-
-static void sig_quit(int signo)
-{
- printf("caught SIGQUIT\n");
- if (signal(SIGQUIT, SIG_DFL) == SIG_ERR)
- err_exit(errno, "can鈥檛 reset SIGQUIT");
-}
+
\ No newline at end of file
diff --git a/test_net_socket/test_net_mod_socket.c b/test_net_socket/test_net_mod_socket.c
index fecf754..f777773 100644
--- a/test_net_socket/test_net_mod_socket.c
+++ b/test_net_socket/test_net_mod_socket.c
@@ -33,9 +33,33 @@
void * client;
+void *proxy_server_handler(void *sockt) {
+ pthread_detach(pthread_self());
+
+ char action[512];
+ while ( true) {
+ printf("Input action: Close?\n");
+ if(scanf("%s",action) < 1) {
+ printf("Invalide action\n");
+ continue;
+ }
+
+ if(strcmp(action, "close") == 0) {
+ net_mod_server_socket_close(sockt);
+ break;
+ } else {
+ printf("Invalide action\n");
+ }
+ }
+}
+
void start_net_proxy(int port) {
+ pthread_t tid;
printf("Start net proxy\n");
void *serverSocket = net_mod_server_socket_open(port);
+
+ // 鍒涘缓涓�涓嚎绋�,鍙互鍏抽棴server
+ pthread_create(&tid, NULL, proxy_server_handler, serverSocket);
if(net_mod_server_socket_start(serverSocket) != 0) {
err_exit(errno, "net_mod_server_socket_start");
}
--
Gitblit v1.8.0