Subject: Re: "fixing" the network shutdown problems with rc.d
To: None <tech-userlevel@netbsd.org>
From: Simon Burge <simonb@netbsd.org>
List: tech-userlevel
Date: 04/11/2000 16:20:21
Greg A. Woods wrote:

> [ On Tuesday, April 11, 2000 at 10:37:14 (+1000), Robert Elz wrote: ]
> > Subject: Re: "fixing" the network shutdown problems with rc.d 
> >
> > Maybe instead of rc.shutdown running the scripts with a "stop" arg
> > it could run them with "shutdown", then just the few scripts
> > (databases and the link) that actually need to do something at
> > system shutdown time can have a "shutdown" case, and all the rest
> > can just no nothing...
> 
> Yes, I like this idea best.  It's closest to the previous behaviour
> too (i.e. with the previous incantation of /etc/rc.shutdown[.local]).

<AOL>Me too!</AOL>.  So how does this look then?  I've changed xdm
because it was in the old /etc/rc.shutdown, and it's also an example
of how to do it.  Whether or not it should be smarter like the old
/etc/rc.shutdown is something we can debate afterwards :)

Simon.
--
Index: rc.shutdown
===================================================================
RCS file: /cvsroot/basesrc/etc/rc.shutdown,v
retrieving revision 1.3
diff -p -u -r1.3 rc.shutdown
--- rc.shutdown	2000/03/10 13:17:25	1.3
+++ rc.shutdown	2000/04/11 06:19:28
@@ -31,7 +31,7 @@ done
 files=$nfiles
 
 for i in $files; do
-	run_rc_script $i stop
+	run_rc_script $i shutdown
 done
 
 date
Index: rc.subr
===================================================================
RCS file: /cvsroot/basesrc/etc/rc.subr,v
retrieving revision 1.11
diff -p -u -r1.11 rc.subr
--- rc.subr	2000/03/10 11:39:27	1.11
+++ rc.subr	2000/04/11 06:19:28
@@ -155,8 +155,8 @@ check_process()
 
 #
 # run_rc_command arg [supported_args]
-#	Scan supported_args (which has "start stop restart rcvar status"
-#	prepended) for arg.
+#	Scan supported_args (which has "start stop restart rcvar status
+#	shutdown" prepended) for arg.
 #	If there's a match, run ${arg}_cmd or the default command (see below).
 #
 #	If arg has a given prefix, then:
@@ -216,6 +216,7 @@ check_process()
 #			else
 #				kill $sig_stop `check_process $command`
 #			$sig_stop defaults to TERM.
+#	shutdown	Nothing.
 #	reload		As stop, except use $sig_reload instead.
 #			$sig_reload defaults to HUP.
 #	restart		Run `stop' then `start'.
@@ -244,7 +245,7 @@ run_rc_command()
 		;;
 	esac
 
-	_keywords="start stop restart rcvar $*"
+	_keywords="start stop restart rcvar shutdown $*"
 	_pidcmd=
 	if [ -z "$_rc_fast_run" ]; then
 		if [ -n "$pidfile" ]; then
@@ -346,6 +347,10 @@ run_rc_command()
 			eval $_precmd || return 1
 			echo "Stopping ${name}."
 			kill -${sig_stop:-TERM} $_pid
+			;;
+
+		shutdown)
+			# ignored
 			;;
 
 		reload)
Index: rc.d/xdm
===================================================================
RCS file: /cvsroot/basesrc/etc/rc.d/xdm,v
retrieving revision 1.2
diff -p -u -r1.2 xdm
--- xdm	2000/03/13 04:04:10	1.2
+++ xdm	2000/04/11 06:19:28
@@ -14,4 +14,11 @@ command="/usr/X11R6/bin/${name}"
 pidfile="/var/run/${name}.pid"
 required_files="/usr/X11R6/lib/X11/xdm/xdm-config"
 
+shutdown_cmd="xdm_shutdown"
+
+xdm_shutdown()
+{
+	run_rc_command stop
+}
+
 run_rc_command "$1" "reload"