mirror of
https://github.com/openwrt/packages.git
synced 2026-04-15 19:02:09 +00:00
Gpsd needs some time to create its Unix socket after the process starts. The hotplug call in service_started() is triggered too early, before the socket is ready, causing failures in scripts that depend on it. Additionally, when gpsd crashes and procd respawns it, service_started() is not called again, so no hotplug event is emitted on respawn. Therefore scripts listening for gpsd availability miss the STARTED event. This commit ensures the hotplug call waits for the socket to appear, so dependent scripts reliably see the STARTED event, even after respawns. Signed-off-by: Oliver Sedlbauer <os@dev.tdt.de>
59 lines
1.1 KiB
Bash
59 lines
1.1 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
# Copyright (C) 2009-2011 OpenWrt.org
|
|
START=50
|
|
|
|
USE_PROCD=1
|
|
PROG=/usr/sbin/gpsd-wrapper
|
|
NAME=gpsd
|
|
SOCKET=/var/run/gpsd.sock
|
|
|
|
LOG_LEVEL="0"
|
|
|
|
validate_section_gpsd()
|
|
{
|
|
uci_load_validate gpsd gpsd "$1" "$2" \
|
|
'enabled:bool:1' \
|
|
'readonly:bool:1' \
|
|
'devices:list(string)' \
|
|
'listen_globally:bool:0' \
|
|
'port:port:2947'
|
|
}
|
|
|
|
gpsd_instance()
|
|
{
|
|
local device
|
|
|
|
[ "$2" = 0 ] || {
|
|
echo "validation failed"
|
|
return 1
|
|
}
|
|
|
|
[ "$enabled" = "0" ] && return 1
|
|
|
|
procd_open_instance
|
|
procd_set_param command "$PROG" -N -n
|
|
|
|
[ "$listen_globally" -ne 0 ] && procd_append_param command -G
|
|
procd_append_param command -S "$port"
|
|
procd_append_param command -D "$LOG_LEVEL"
|
|
[ "$readonly" = "1" ] && procd_append_param command -b
|
|
procd_append_param command -F "$SOCKET"
|
|
for device in $devices; do
|
|
procd_append_param command "$device"
|
|
done
|
|
procd_set_param respawn
|
|
|
|
procd_close_instance
|
|
}
|
|
|
|
start_service()
|
|
{
|
|
config_load "$NAME"
|
|
config_foreach validate_section_gpsd gpsd gpsd_instance
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger "$NAME"
|
|
procd_add_validation validate_section_gpsd
|
|
}
|