From dcb36ba8fd76b18dccf8eafced6fe857fb057255 Mon Sep 17 00:00:00 2001 From: zhangtaohz Date: Wed, 26 Jun 2019 17:08:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Mod=20aaa-12=20The=20method=20of=20thread?= =?UTF-8?q?=20exit=20=20was=20modified=20RCA=EF=BC=9A=20SOL=EF=BC=9A=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9Azhangtao=20=E6=A3=80?= =?UTF-8?q?=E8=A7=86=E4=BA=BA=EF=BC=9Azhangtao?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Platform/user/trace/test/test_client_main.c | 7 +++++-- Platform/user/trace/trace-api/trace_api.c | 7 ++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Platform/user/trace/test/test_client_main.c b/Platform/user/trace/test/test_client_main.c index a46b28b22..d7d03a23b 100755 --- a/Platform/user/trace/test/test_client_main.c +++ b/Platform/user/trace/test/test_client_main.c @@ -53,13 +53,16 @@ int main(int argc, char **argv) } else { printf("sync exec\n"); trace_sync_exec(&trace1); + printf("sync final\n"); } printf("send success\n"); } //policy_client_exit(); - sleep(10); - + if (async != 3) { + sleep(10); + } + trace_client_exit(); return 0; } diff --git a/Platform/user/trace/trace-api/trace_api.c b/Platform/user/trace/trace-api/trace_api.c index d3bd222e9..32a24e97d 100755 --- a/Platform/user/trace/trace-api/trace_api.c +++ b/Platform/user/trace/trace-api/trace_api.c @@ -59,7 +59,7 @@ typedef struct _sess { static int g_pid; static pthread_t g_client_thread; -static volatile int g_client_stop = 0; +//static volatile int g_client_stop = 0; static uint32_t g_seq = 0; static volatile sess_t g_sess = {0}; @@ -256,7 +256,8 @@ FAIL: trace_ret_t trace_client_exit() { - g_client_stop = 1; + //g_client_stop = 1; + cfg_channel_close(); // 先关闭,判断SOCKET异常来退出线程 pthread_join(g_client_thread, NULL); for (int i = 0; i < sizeof(g_sess.hsess_mutex) / sizeof(pthread_mutex_t); i++) { @@ -267,7 +268,7 @@ trace_ret_t trace_client_exit() struct hlist_node *n; COLLECT_HLIST_CLEAR(pos, n, g_sess.hess, sizeof(g_sess.hess) / sizeof(struct hlist_head), node, free); - cfg_channel_close(); + return TRACE_SUCCESS; } From 6139abcc96a5a510036a9b0ae4bc2be40853790e Mon Sep 17 00:00:00 2001 From: xusaiqun Date: Wed, 26 Jun 2019 03:03:24 -0700 Subject: [PATCH 2/2] =?UTF-8?q?Mod=20aaa-12=20=E6=8F=8F=E8=BF=B0=EF=BC=9A?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0netlink=E7=94=A8=E6=88=B7=E6=80=81listen?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=B9=E9=94=99=E5=A4=84=E7=90=86=E3=80=82?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0dpi=5Frcv=5Ftest=E6=A8=A1=E5=9D=97makefile?= =?UTF-8?q?=E3=80=82=20RCA=EF=BC=9A=20SOL=EF=BC=9A=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=BA=EF=BC=9Axusaiqun=20=E6=A3=80=E8=A7=86=E4=BA=BA?= =?UTF-8?q?=EF=BC=9Axusaiqun?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xusaiqun --- Makefile | 3 +++ Platform/build/user.pdeliv.rcvtest.Makefile | 8 ++++---- Platform/modules/netlink_api/libnetlink_k.c | 13 ++++++++++++- Platform/modules/pdelivery/pdeliverynl_kinit.c | 5 +++++ Platform/user/netlink_uapi/libnetlinku.c | 6 ++++++ 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 8467b065c..42b8f10de 100755 --- a/Makefile +++ b/Makefile @@ -79,6 +79,7 @@ ifeq ($(OPT), clean) $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.pdelivery.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=pdeliv $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.cfg2kernel.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=cfg2kernel $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.pdeliv_u.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=pdeliv_u + $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.pdeliv.rcvtest.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=pdeliv_rcvtest $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.netlink_uapi.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=netlink_uapi else ifeq ($(OPT), install) $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.netlink_api.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=netlink_api @@ -87,6 +88,7 @@ else ifeq ($(OPT), install) $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.netlink_uapi.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=netlink_uapi $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.cfg2kernel.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=cfg2kernel $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.pdeliv_u.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=pdeliv_u + $(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.pdeliv.rcvtest.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=pdeliv_rcvtest else $(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.netlink_api.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=netlink_api $(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.cfgrcv.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=cfgrcv @@ -94,6 +96,7 @@ else $(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.netlink_uapi.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=netlink_uapi $(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.cfg2kernel.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=cfg2kernel $(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.pdeliv_u.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=pdeliv_u + $(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.pdeliv.rcvtest.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=pdeliv_rcvtest endif trace: diff --git a/Platform/build/user.pdeliv.rcvtest.Makefile b/Platform/build/user.pdeliv.rcvtest.Makefile index eae31ead2..19f024de2 100644 --- a/Platform/build/user.pdeliv.rcvtest.Makefile +++ b/Platform/build/user.pdeliv.rcvtest.Makefile @@ -1,5 +1,5 @@ # target name, the target name must have the same name of c source file -TARGET_NAME=pdeliv +TARGET_NAME=pdeliv_rcvtest # target # for linux module driver: KO @@ -27,7 +27,7 @@ VPATH = ../user/pdeliv_u # set the source file, don't used .o because of ... -COMMON_SRCS = pdelivery_main.c +COMMON_SRCS = dpi_rcv_test.c # MRS Board Source Files PLAT_LINUX_SRCS = $(COMMON_SRCS) @@ -41,8 +41,8 @@ PLAT_LINUX_CFLAGS := $(PLAT_ARM64_CFLAGS) PLAT_ARM64_LDFLAGS := PLAT_LINUX_LDFLAGS := $(PLAT_ARM64_LDFLAGS) -ARM64_LIBS := ./pdeliv-rcvtest-arm64.so -LINUX_LIBS := ./pdeliv-rcvtest-linux.so +ARM64_LIBS := ./libnetlinku-arm64.so +LINUX_LIBS := ./libnetlinku-linux.so diff --git a/Platform/modules/netlink_api/libnetlink_k.c b/Platform/modules/netlink_api/libnetlink_k.c index ad3f5e40c..132c89935 100755 --- a/Platform/modules/netlink_api/libnetlink_k.c +++ b/Platform/modules/netlink_api/libnetlink_k.c @@ -237,11 +237,22 @@ int debugfs_pkt_num_stati_witisend(struct netlinkk_cfg *g_nlcfg, printk("------------------debugfs_pkt_num_stati ack msg_type %d,seq=%d!\n",out_nlh->nlmsg_type,nlh->nlmsg_seq); err = commnl_unicast(g_nlcfg->sk, out_skb, nlh->nlmsg_pid); if (err > 0) + { err = 0; + } + else + { + goto failure; + } return err; failure: - printk(KERN_INFO " failed in fun dataready!\n"); + if(out_skb != NULL) + { + //kfree_skb(out_skb); + } + + printk(KERN_INFO " failed in fun dataready!\n"); return 0; } diff --git a/Platform/modules/pdelivery/pdeliverynl_kinit.c b/Platform/modules/pdelivery/pdeliverynl_kinit.c index c3cfb0c83..31dc3c807 100644 --- a/Platform/modules/pdelivery/pdeliverynl_kinit.c +++ b/Platform/modules/pdelivery/pdeliverynl_kinit.c @@ -258,6 +258,11 @@ unsigned int pdelivery_hook_func(void *priv, return NF_ACCEPT;/*must return a value*/ failure: + if(out_skb != NULL) + { + //kfree_skb(out_skb); + } + //printk(KERN_INFO " failed in pdelivery_hook_func!\n"); g_nlcfg.dfs.send_fail ++; g_nlcfg.msg_processer[NLMSG_RECV_RAW_PKT].dfs.send_fail++; diff --git a/Platform/user/netlink_uapi/libnetlinku.c b/Platform/user/netlink_uapi/libnetlinku.c index ecd799896..0ce5f77c5 100644 --- a/Platform/user/netlink_uapi/libnetlinku.c +++ b/Platform/user/netlink_uapi/libnetlinku.c @@ -660,6 +660,12 @@ int conmnl_listen(struct upmnl_handle *nl, //printf("pdelivnl_listen recvmsg....\r\n"); iov.iov_len = sizeof(buf); //status = recvmsg(nl->fd, &msg, MSG_WAITALL); + if(nl->fd <= 0) + { + printf("conmnl_listen fd is closed,fd = %d,exist listen.\r\rn",nl->fd); + return 0; + } + status = recvmsg(nl->fd, &msg, MSG_WAITFORONE); if (status < 0) {