Bug#401645: [pkg-wpa-devel] Bug#401645: wpasupplicant is stopped too early at reboot/shutdown

Reinhard Tartler siretart at tauware.de
Wed Dec 13 10:53:53 CET 2006


reassign 401645 wpasupplicant,sysvinit

Przemyslaw Bruski <pbruskispam at op.pl> writes:

> Kel Modderman wrote:
>> I though I was either crazy, or you were whispering sweet nothings in
>> my ear, because on my boxen sendsigs was still at sequence number
>> 20. Then I found this in
>> /usr/share/doc/initscripts/changelog.Debian.gz:
>>   
>
> <blushes> Sorry about that.
>
> Hmm. I think this is no longer wpasupplicant issue, but please do not
> close that bug, it it's OK
> with you. My suggestion would be to ask the sysvinit guys to replace
> sendsigs with the following script
> (not sure if the attachment will come through, if it does not, I will
> repost the script body).


With this rationale, I'm reassigning this bug to both packages, since
this is an interaction issue. 

Full quoting for convinience of the sysvinit maintainers:


> Basically, in this script killall5 is replaced by a shell function that
> does the same and takes command names
> as parameters. These command are never killed.
>
> It solves both the wpasupplicant issue and usplash issue (I did not test
> the latter, I admit).
>
> The following sequence would be needed:
> 1. new (well, let's call it my) sendsigs would have to be run before
> umountnfs
> 2. umountnfs
> 3. wpasupplicant
> 4. original sendsigs (or mine running without exceptions).
>
> What would also be needed is you backing this solution, of course ;-)
>
>
> bye,
>
> Przemek
> #! /bin/sh
> ### BEGIN INIT INFO
> # Provides:          sendsigs
> # Required-Start:    
> # Required-Stop:     umountnfs
> # Default-Start:
> # Default-Stop:      0 6
> # Short-Description: Kill all remaining processes except for crucial ones.
> # Description: 
> ### END INIT INFO
>
> PATH=/usr/sbin:/usr/bin:/sbin:/bin
>
> . /lib/lsb/init-functions
>
> #lists all ancestor pids, until pid number 0 is reached
> getAncestorPids() {
> 	local pid=$1
> 	local ppids=
>
> 	while true; do
> 		ppid=$(ps --no-headers --format ppid $pid)
> 		if [ $ppid -eq 0 ]; then
> 			break;
> 		fi
> 		ppids=$ppid" "$ppids
> 		pid=$ppid
> 	done
> 	echo $ppids
> }
>
>
> # Replacement for killall5 command. Just like killall5 does, it sends
> # a signal to all processes except for: ancestor processes, itself
> # and kernel threads.
> # Addtionally, it skips all processes that had been run using command
> # name passed as a parameter.
> #
> # arguments:
> # signalnumber
> # list of command names that should not be killed
> killall5_except() {
> 	local signalNumber="$1"
> 	shift 
> 	local myPid=$$
> 	local preciousPids=$(ps --no-headers --format pid -C "$*")
> 	#initial precious pids are: my pid and pids of processes given as parameters
> 	preciousPids=$myPid" "$preciousPids
> 	local ancestorPids=
>
> 	for preciousPid in $preciousPids; do
> 		local sessionLeaderPid=$(ps --no-headers --format session $preciousPid)
> 		ancestorPids=$ancestorPids" "$(getAncestorPids $preciousPid)
> 	done
>
> 	#kernel threads should not be killed too. Kernel threads have userspace size of 0.
> 	local kernelThreadPids=$(ps --format pid,size --no-headers -A | grep " "0$| sed -e s/" [^ ]*$"//)
>
> 	allPreciousPids="$preciousPids $ancestorPids $kernelThreadPids"
>
> 	allPidsToTerminate=$(ps --deselect --no-headers --format pid --pid $allPreciousPids)
> 	
> 	#a trick to eliminate ps pid from the list
> 	allPidsToTerminate=$(ps --no-headers --format pid --pid $allPidsToTerminate)
> 	
> 	if [ ! -z "$allPidsToTerminate" ]; then
> 	    kill $signalNumber $allPidsToTerminate
> 	fi
> }
>
> do_stop () {
> 	# Kill all processes.
> 	log_action_begin_msg "Asking all remaining processes to terminate"
> 	killall5_except -15 wpa_supplicant usplash
> 	log_action_end_msg 0
> 	sleep 5
> 	log_action_begin_msg "Killing all remaining processes"
> 	killall5_except -9 wpa_supplicant usplash
> 	log_action_end_msg 0
> }
>
> case "$1" in
>   start)
> 	# No-op
> 	;;
>   restart|reload|force-reload)
> 	echo "Error: argument '$1' not supported" >&2
> 	exit 3
> 	;;
>   stop)
> 	do_stop
> 	;;
>   *)
> 	echo "Usage: $0 start|stop" >&2
> 	exit 3
> 	;;
> esac
>
> :
> _______________________________________________
> Pkg-wpa-devel mailing list
> Pkg-wpa-devel at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/pkg-wpa-devel

-- 
Gruesse/greetings,
Reinhard Tartler, KeyID 945348A4




More information about the Pkg-wpa-devel mailing list