gsmd: rewrite start script, use start-stop-daemon. fixes OM bugs #704, #751
authorOpenmoko anonymizer key <devel@lists.openmoko.org>
Tue, 28 Aug 2007 15:05:16 +0000 (15:05 +0000)
committerOpenmoko anonymizer key <devel@lists.openmoko.org>
Tue, 28 Aug 2007 15:05:16 +0000 (15:05 +0000)
packages/gsm/files/gsmd
packages/gsm/libgsmd_svn.bb

index 5c78e81..bc7999e 100644 (file)
-#!/bin/sh
+##!/bin/sh
 #
-# gsmd This shell script starts and stops gsmd.
+# gsmd  This shell script starts and stops gsmd.
 #
 # chkconfig: 345 90 40
 # description: Gsmd manages access to a serial- or USB-connected GSM
 # processname: gsmd
 
-# Source configuration
-. /etc/default/gsmd
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
 
-# Source function library.
-#. /etc/rc.d/init.d/functions
+[ -f /etc/default/rcS ] && . /etc/default/rcS
+[ -f /etc/default/gsmd ] && . /etc/default/gsmd
 
-RETVAL=0
-prog="gsmd"
-
-start() {
-       # Hack for broken uboot and/or kernel on the neo1973
-       dmesg -n1
-
-       if [ -n "${GSM_POW}" ]
-       then
-               if [ -e "${GSM_POW}" ]
-               then
-                       echo -n "Powering up GSM device..."
-                       echo "1" > ${GSM_POW}
-                       sleep 1
-                       echo "done"
-               else
-                       echo "GSM device not found. Aborting startup"
-                       return false
-               fi
-       fi
-       # Start daemons.
-       echo -n "Starting $prog: "
-       # We don't use the daemon function here because of a known bug
-       # in initlog -- it spuriously returns a nonzero status when 
-       # starting daemons that fork themselves.  See
-       # http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=130629
-       # for discussion.  Fortunately:
-       #
-       # 1. gsmd startup can't fail, or at least not in the absence of
-       # much larger resource-exhaustion problems that would be very obvious.
-       #
-       # 2. We don't need all the logging crud that daemon/initlog sets
-       # up -- gsmd does its own syslog calls.
-       #
-       if [ -e "${GSM_DEV}" ]
-       then
-               gsmd -p ${GSM_DEV} ${GSMD_OPTS} >/tmp/gsm.log 2>&1 &
-               echo "success"
-       else
-           # User needs to symlink ${GPS_DEV} to the right thing
-           echo "No ${GSM_DEV} device, aborting gsmd startup."
-       fi
-       RETVAL=$?
-       echo
-       [ $RETVAL -eq 0 ] && touch /var/lock/subsys/gsmd
-       return $RETVAL
-}
-
-stop() {
-       # Stop daemons.
-       echo -n "Shutting down $prog: "
-        killall gsmd
-#        killproc gsmd
-       RETVAL=$?
-       echo
-       if [ $RETVAL -eq 0 ]
-       then
-           rm -f /var/lock/subsys/gsmd;
-       fi
-       return $RETVAL
-}
-
-# See how we were called.
 case "$1" in
-  start)
-       start
-       ;;
-  stop)
-       stop
-       ;;
-  restart|reload)
-       stop
-       start
-       RETVAL=$?
-       ;;
-  condrestart)
-       if [ -f /var/lock/subsys/gsmd ]; then
-           stop
-           start
-           RETVAL=$?
-       fi
-       ;;
-  status)
-#      status gsmd
-#      RETVAL=$?
-       ;;
-  *)
-       echo "Usage: $0 {start|stop|restart|condrestart|status}"
-       exit 1
+    start)
+        [ -n $GSM_POW ] && ( echo "0" >$GSM_POW; sleep 1 )
+        [ -n $GSM_POW ] && ( echo "1" >$GSM_POW; sleep 1 )
+        [ -n $GSM_RES ] && ( echo "1" >$GSM_RES; sleep 1 )
+        [ -n $GSM_RES ] && ( echo "0" >$GSM_RES; sleep 2 )
+
+        echo -n "Starting GSM daemon: "
+        start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS >/tmp/gsm.log 2>&1 &
+
+        if [ $? = 0 ]; then
+            echo "gsmd."
+        else
+            echo "(failed.)"
+        fi
+        ;;
+    stop)
+        [ -n $GSM_POW ] && echo "0" >$GSM_POW
+
+        echo -n "Stopping GSM daemon: "
+        start-stop-daemon -K -x /usr/sbin/gsmd
+        echo "gsmd."
+        ;;
+    restart|force-reload)
+        $0 stop
+        $0 start
+        exit
+        ;;
+    *)
+        echo "Usage: /etc/init.d/apmd {start|stop|restart|force-reload}"
+        exit 1
+        ;;
 esac
 
-exit $RETVAL
+exit 0
+
index 7eee675..5862ea6 100644 (file)
@@ -4,7 +4,7 @@ LICENSE = "GPL LGPL"
 SECTION = "libs/gsm"
 PROVIDES += "gsmd"
 PV = "0.1+svn${SRCDATE}"
-PR = "r21"
+PR = "r22"
 
 SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gsm;proto=http \
            file://gsmd \
@@ -46,6 +46,7 @@ RDEPENDS_gsmd-plugins = "gsmd-plugin-machine-generic \
 
 RDEPENDS_gsmd = "initscripts"
 RRECOMMENDS_gsmd = "gsmd-plugins"
+
 FILES_${PN}-dbg += "${libdir}/gsmd/.debug/*"
 FILES_${PN}-tools = "${bindir}/*"
 FILES_gsmd = "${sbindir}/gsmd ${sysconfdir}"