From: kladit@t-online.de (Klaus Dittrich)
To: lkml <linux-kernel@vger.kernel.org>
Cc: Sripathi Kodi <sripathik@in.ibm.com>,
Klaus Dittrich <kladit@t-online.de>,
Linus Torvalds <torvalds@osdl.org>
Subject: Re: do_wait fix for 2.6.10-rc1
Date: Mon, 29 Nov 2004 12:53:09 +0100 [thread overview]
Message-ID: <41AB0DA5.5030906@xeon2.local.here> (raw)
In-Reply-To: <41AA9F21.9060408@in.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 993 bytes --]
Sripathi Kodi wrote:
> Can you test this patch please?
>
>> --
>> Regards Klaus
>
>
> Hi Klaus,
>
> I have tested your patch against my testcase and it seems to be alright.
>
> My testcase is right here in my first post on LKML about this:
> http://lkml.org/lkml/2004/11/5/34! The essence of the testcase is two
> threads racing in waitpid to collect the exit status of a child.
> Sometimes the thread that loses this race gets stuck in waitpid
> forever unless manually interrupted. I had been able to recreate this
> problem only on a multiprocessor machine. The essence of the fix was
> to make the thread that loses this race not to set 'flag =1'. The
> patch you sent me does not alter this behavior, so it works alright.
>
> Thanks and regards,
> Sripathi.
I encountered a bug in waitpid after Sripathi's patch
was applied.
See lkml
"kernel reports kill too late? Thu Nov 18 2004 - 07:36:48 EST"
Attached is a patch for do_wait() that may fix both problems.
--
Regards Klaus
[-- Attachment #2: 2patch-exit.c --]
[-- Type: text/plain, Size: 937 bytes --]
--- kernel/exit.ORIG.c 2004-11-24 17:20:32.000000000 +0100
+++ kernel/exit.c 2004-11-26 17:38:36.000000000 +0100
@@ -1316,6 +1316,9 @@ static long do_wait(pid_t pid, int optio
DECLARE_WAITQUEUE(wait, current);
struct task_struct *tsk;
int flag, retval;
+ struct task_struct *p;
+ struct list_head *_p;
+ int ret;
add_wait_queue(¤t->wait_chldexit,&wait);
repeat:
@@ -1324,9 +1327,6 @@ repeat:
read_lock(&tasklist_lock);
tsk = current;
do {
- struct task_struct *p;
- struct list_head *_p;
- int ret;
list_for_each(_p,&tsk->children) {
p = list_entry(_p,struct task_struct,sibling);
@@ -1377,10 +1377,11 @@ repeat:
goto end;
break;
}
- flag = 1;
check_continued:
- if (!unlikely(options & WCONTINUED))
+ if (!unlikely(options & WCONTINUED)) {
+ flag = 1;
continue;
+ }
retval = wait_task_continued(
p, (options & WNOWAIT),
infop, stat_addr, ru);
parent reply other threads:[~2004-11-29 11:56 UTC|newest]
Thread overview: expand[flat|nested] mbox.gz Atom feed
[parent not found: <41AA9F21.9060408@in.ibm.com>]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41AB0DA5.5030906@xeon2.local.here \
--to=kladit@t-online.de \
--cc=linux-kernel@vger.kernel.org \
--cc=sripathik@in.ibm.com \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.