From 6c8ad9f02bcd2f9122ccda44735565f547ac9077 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Tue, 4 Mar 2025 10:22:41 +0100 Subject: [PATCH] modemmanager: fix pending mmcli calls for ModemManager-monitor script If the ModemManager is stopped via '/etc/init.d/modemmanager', mmcli calls always remain in the process list. This is because the ModemManager-monitor call is not terminated properly, as the kill signals are not handled correctly in the startup script for mmcli. To fix this, the signal handling is refactored. Signed-off-by: Florian Eckert --- net/modemmanager/Makefile | 2 +- .../files/usr/sbin/ModemManager-monitor | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/net/modemmanager/Makefile b/net/modemmanager/Makefile index 69d364a767..2eb06ab4bb 100644 --- a/net/modemmanager/Makefile +++ b/net/modemmanager/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=modemmanager PKG_VERSION:=1.22.0 -PKG_RELEASE:=22 +PKG_RELEASE:=23 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/ModemManager.git diff --git a/net/modemmanager/files/usr/sbin/ModemManager-monitor b/net/modemmanager/files/usr/sbin/ModemManager-monitor index 44fdab5949..08509e7b7b 100644 --- a/net/modemmanager/files/usr/sbin/ModemManager-monitor +++ b/net/modemmanager/files/usr/sbin/ModemManager-monitor @@ -6,9 +6,10 @@ trap_with_arg() { func="$1" ; shift + pid="$1" ; shift for sig ; do # shellcheck disable=SC2064 - trap "$func $sig" "$sig" + trap "$func $sig $pid" "$sig" done } @@ -23,7 +24,7 @@ func_trap() { mm_monitor_cache_remove "$object" done < ${MODEMMANAGER_MONITOR_CACHE} - kill "-${1}" "$CHILD" 2>/dev/null + kill "-${1}" "$2" 2>/dev/null } mm_monitor_get_sysfspath() { @@ -116,8 +117,6 @@ main() { local step=1 local mmrunning=0 - trap_with_arg func_trap INT TERM KILL - mkdir -p "${MODEMMANAGER_RUNDIR}" chmod 0755 "${MODEMMANAGER_RUNDIR}" @@ -140,16 +139,18 @@ main() { return } - /usr/bin/mmcli -M | { + sh -c "echo \$\$; exec /usr/bin/mmcli -M" | { + read -r monitor_pid + trap_with_arg func_trap "$monitor_pid" SIGINT SIGTERM SIGKILL local line while read -r line; do mm_log "debug" "Monitor cache line: ${line}" mm_monitor_cache "$line" done } & - CHILD="$!" - - wait $CHILD + child="$!" + trap_with_arg func_trap "$child" SIGINT SIGTERM SIGKILL + wait $child } main "$@" -- 2.30.2