Hello List...
I am working on trying to port a LINUX kernel
driver from RedHat AS 4/5 to Fedora 11 & 12.
Within this driver, I create some threads.
The threads call skb_rec_datagram().
When it is time to shut down the system,
my main kernel code ( in RH 4 & 5 ) called kill_proc( pid, SIGTERM, 0 )
to terminate the threads created above.
The skb_rec_datagram() would return with an error,
and the threads would then exit cleanly.
Now for Fedora 11 & 12, I understand that kill_proc() is no
longer available to use. So, I have performed experiments that
replace the kill_proc() with kill_pid()
or with send_sig_info().
Neither of these routines are terminating my threads.
I have added extra debug to the code. The return codes from
kill_pid() and send_sig_info() are zero, implying that
what I asked for was accomplished.
Yet, my threads did not terminate. I added code
after the skb_rec_datagram() call to print out the error value.
This printk statement does not execute when the SIGTERM
is genereated.
Using "crash" on a live Fedora 12 system, I see that my threads
are, as expected, sitting inside skb_rec_datagram().
So, I am left with two choices. Either the
replacements for kill_proc() are not functioning, or
skb_rec_datagram() has changed its behavior that ignores
SIGTERM.
Interestingly, I can "kill -9 " my threads as ROOT from the
command
line on a RH 4/5 system. But
I can not do so on a Fedora 11/12 system. This would seem to imply that
my signals are not masked correctly. However, inspection via
'crash' on a live system seems to indicate that my signal mask is ok.
Does anyone know if the behavior of skb_rec_datagram() has changed
in the newer kernels ?
thanks
wr
In Fedora 11 code for net/core/datagram.c, the skb_rec_datagram() and
wait_for_packet() functions seem to have changed such that there is a
new ( to me anyway ) function named receiver_wake_function(). This function,
based on the comments, appears to be filtering signals.
Can anyone tell me if this receiver_wake_function() is filtering out
SIGTERM and SIGKILL signals ?
( I have not been able to determine how these SIG signals convert to the poll bits in the
code... )
wr