From 301ab3ba107db4547cbc7dfa5dd1cc805c37ce6c Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Sat, 2 Jul 2022 13:26:58 +0800 Subject: [PATCH] server: fix server not exit issue on asus router --- package/optware/S50smartdns | 8 +++++++- src/smartdns.c | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/package/optware/S50smartdns b/package/optware/S50smartdns index f594b21..2def5bb 100644 --- a/package/optware/S50smartdns +++ b/package/optware/S50smartdns @@ -348,7 +348,13 @@ case "$1" in fi if [ ! -d "/proc/$pid" ]; then - return 0; + return 0 + fi + + stat="$(cat /proc/${pid}/stat | awk '{print $3}' 2>/dev/null)" + if [ "$stat" = "Z" ]; then + $SLEEP $SLEEPTIME + return 0 fi $SLEEP $SLEEPTIME 2>/dev/null diff --git a/src/smartdns.c b/src/smartdns.c index f9eda8a..f92b62c 100644 --- a/src/smartdns.c +++ b/src/smartdns.c @@ -469,10 +469,15 @@ int main(int argc, char *argv[]) char config_file[MAX_LINE_LEN]; char pid_file[MAX_LINE_LEN]; int signal_ignore = 0; + sigset_t empty_sigblock; safe_strncpy(config_file, SMARTDNS_CONF_FILE, MAX_LINE_LEN); safe_strncpy(pid_file, SMARTDNS_PID_FILE, MAX_LINE_LEN); + /* patch for Asus router: unblock all signal*/ + sigemptyset(&empty_sigblock); + sigprocmask(SIG_SETMASK, &empty_sigblock, NULL); + while ((opt = getopt(argc, argv, "fhc:p:Svx")) != -1) { switch (opt) { case 'f':