[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Problem with thread specific data destructor


For learning purposes, I'll expand a bit on Samuel's brief mid-night
email.  ;-) (As he wrote, we recently fixed this issue.)

On Sat, 9 Jul 2011 12:47:01 +0200, Erik Johansson <debian@ejohansson.se> wrote:
> I downloaded a qemu image and spent some time debugging it without any
> luck. Everything seems ok, but the destructor is never called.

First, thanks for trying!  What issues did you struggle on?  Did you get
the relevant source packages located/built/etc.?  That is, is there
anything we can do to improve the process?

> To see if it was a problem with the pthread implementation I created a
> simple test program [2]. The "problem" is that this works, so now I
> don't really know where to continue debugging.

Yeah.  The problem only showed up if there are ``holes'' in the chain of
destructor functions; see the test program here:
A minimal modification of you test program will make this apparent:

> #include <pthread.h>
> #include <stdio.h>
> void deleter(void* data)
> {
>   printf("in deleter with %p\n", data);
> }
> void* threadfn(void* data)
> {
>   pthread_setspecific(*(pthread_key_t*)data, (void*)1);
>   return NULL;
> }
> int main()
> {
>   pthread_key_t key;

Here, add:

    pthread_key_create(&key, deleter);

Then continue:

>   pthread_key_create(&key, deleter);
>   pthread_t thread;
>   pthread_create(&thread, 0, threadfn, &key);
>   pthread_join(thread, 0);
>   pthread_key_delete(key);
>   return 0;
> }


Attachment: pgpw5A0II3OSD.pgp
Description: PGP signature

Reply to: