mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-26 00:41:17 +00:00
0dbe3d28f7
Support for -D got broken in the 2.0.11 release by the upstream commit 218d8c667944 ("first pass L2 mode w/UDP checks, v4 only"). After that commit clients were still able to connect but no traffic was passed. It was reported and is fixed now in the upstream git repository. Backport two patches to fix this. The first one is just a requirement for the later to apply. The second one is the real fix and it needed only a small adjustment to apply without backporing the commit 10887b59c7e7 ("fix --txstart-time report messages"). Fixes:7d15f96eaf
("iperf: bump to 2.0.12") Signed-off-by: Rafał Miłecki <rafal@milecki.pl> (cherry picked from commit87cd118794
)
44 lines
1.3 KiB
Diff
44 lines
1.3 KiB
Diff
From 7c0ac64ebea38d0d9ff4d160db4d33bc087a3490 Mon Sep 17 00:00:00 2001
|
|
From: Robert McMahon <rjmcmahon@rjmcmahon.com>
|
|
Date: Mon, 16 Jul 2018 17:51:29 -0700
|
|
Subject: [PATCH] fix latent bug in signal handling, per POSIX calling exit()
|
|
in signal handler is not safe. Use _exit() instead. Also, detect the user
|
|
signal SIGINT for the case of server needing two invocations to stop server
|
|
threads. Note: the server threads still need some work from graceful
|
|
termination with a single ctrl-c
|
|
|
|
---
|
|
|
|
--- a/compat/signal.c
|
|
+++ b/compat/signal.c
|
|
@@ -171,7 +171,7 @@ void sig_exit( int inSigno ) {
|
|
static int num = 0;
|
|
if ( num++ == 0 ) {
|
|
fflush( 0 );
|
|
- exit( 0 );
|
|
+ _exit(0);
|
|
}
|
|
} /* end sig_exit */
|
|
|
|
--- a/src/main.cpp
|
|
+++ b/src/main.cpp
|
|
@@ -268,7 +268,7 @@ void Sig_Interupt( int inSigno ) {
|
|
// We try to not allow a single interrupt handled by multiple threads
|
|
// to completely kill the app so we save off the first thread ID
|
|
// then that is the only thread that can supply the next interrupt
|
|
- if ( thread_equalid( sThread, thread_zeroid() ) ) {
|
|
+ if ( (inSigno == SIGINT) && thread_equalid( sThread, thread_zeroid() ) ) {
|
|
sThread = thread_getid();
|
|
} else if ( thread_equalid( sThread, thread_getid() ) ) {
|
|
sig_exit( inSigno );
|
|
@@ -420,9 +420,3 @@ VOID ServiceStop() {
|
|
}
|
|
|
|
#endif
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|