Re: clone() <-> getpid() bug in 2.6?

From: Linus Torvalds
Date: Sat Jun 05 2004 - 15:46:53 EST




On Sat, 5 Jun 2004, Russell Leighton wrote:
>
> I have a test program (see attached) that shows what looks like a bug in
> 2.6.5-1.358 (FedoraCore2)...and breaks my program :(
>
> In summary, I am doing:
>
> clone(run_thread, stack + sizeof(stack) -1,
> CLONE_FS|CLONE_FILES|CLONE_VM|SIGCHLD, NULL))
>
> According to the man page the child process should have its own pid as
> returned by getpid()...much like fork().
>
> In 2.6 the child receives the parent's pid from getpid(), while 2.4
> works as documented:
>
> In 2.4 the test program does:
> parent pid: 26647
> clone returned pid: 26648
> thread reported pid: 26648
>
> In 2.6 the test program does:
> parent pid: 16665
> thread reported pid: 16665
> clone returned pid: 16666

Hmm.. The above is the correct behaviour if you use CLONE_THREAD
("getpid()" will then return the _thread_ ID), but it shouldn't happen
without that. And clearly you don't have it set.

And indeed, it doesn't happen for me on my system:

parent pid: 13552
thread reported pid: 13553
clone returned pid: 13553

so I wonder if either the Fedora libc always adds that CLONE_THREAD thing
to the clone() calls, or whether the FC2 kernel is buggy.

Arjan?

Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/