Re: 8139too: defunct threads

Manfred Spraul
2001-04-14T14:00:41Z

[-- Attachment #1: Type: text/plain, Size: 846 bytes --]

>> Ah. Of course. All (or most) kernel initialisation is
>> done by PID 1. Search for "kernel_thread" in init/main.c
>>
>> So it seems that in your setup, process 1 is not reaping
>> children, which is why this hasn't been reported before.
>> Is there something unusual about your setup?

> I found the difference which causes this. If I build my kernel with
> IP_PNP (IP: kernel level autoconfiguration) support I get a defunt
> thread for each 8139too device. If I don't build with IP_PNP
> support I don't get any, defunct ethernet threads.

Does init(8) reap children that died before it was spawned? I assume
that the defunct tasks were there _before_ init was spawned.

Perhaps init() [in linux/init/main.c] should reap all defunct tasks
before the execve("/sbin/init").

I've attached an untested patch, could you try it?

--
Manfred

[-- Attachment #2: patch-main.dat --]
[-- Type: application/octet-stream, Size: 423 bytes --]

--- main.c Fri Mar 30 15:42:49 2001
+++ /pub/home/manfred/main.c Sat Apr 14 15:56:26 2001
@@ -777,6 +777,13 @@

(void) dup(0);
(void) dup(0);
+
+ while (waitpid(-1, (unsigned int *)0, __WALL|WNOHANG) > 0)
+ ;
+ spin_lock_irq(&current->sigmask_lock);
+ flush_signals(curtask);
+ recalc_sigpending(curtask);
+ spin_lock_irq(&current->sigmask_lock);

/*
* We try each of these until one succeeds.