This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: pthread_exit behavior from main


On Thu, Oct 4, 2012 at 6:05 PM, Bharath Ramesh <bramesh@vt.edu> wrote:
> I am attaching a small code snippet and I am little bit curious
> on the behavior of pthread_exit from main based on the output. I
> am passing the address of local stack variable to the threads
> main is creating. In the thread function I am printing its value.
> The issue I am noticing is that the value printed isnt what I am
> expecting it to be "42" for each thread every run. If I run many
> instances of the application simultaneously some threads report
> "0" instead of "42".
>
> I suspect this behavior is because probably main's stack isnt
> valid. I agree that it is bad programming practice to pass a
> local stack variable to the threads spawned. I am confused by the
> behavior based on what is stated in the pthread_exit manpage [1]
> in the notes section. The manpage states "To allow other threads
> to continue execution, the main thread should terminate by
> calling pthread_exit() rather than exit(3)". Does this imply that
> main's stack will be valid till all the threads exit?
>
> I would really appreciate it if somebody could clarify this
> behavior I am seeing.

The test case is invalid.

Once main exits via pthread_exit it will be cancelled and the stack
access is no longer well defined.

You are seeing the undefined results of reading memory that the
runtime has marked with madvise as MADV_DONTNEED.

So if you're lucky you get the page back with 42, otherwise you get a
zero-fill page.

Cheers,
Carlos.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]