Hi Sergei,
I tried but I just couldn't make my own thread specific data to coexist with structure
st_my_thread_var so I ended up moving my data to the structure and used it instead.
I suppose there is really no reason to reinvent the wheel, is there ?
But anyway, thank you for your help and you are the best.
Hiromichi
--- On Sun, 4/24/11, Sergei Golubchik <serg@stripped> wrote:
> From: Sergei Golubchik <serg@stripped>
> Subject: Re: Use of thread specific data with mysqld
> To: "Hiromichi Watari" <hiromichiwatari@stripped>
> Cc: internals@stripped
> Date: Sunday, April 24, 2011, 5:04 PM
> Hi, Hiromichi!
>
> On Apr 24, Hiromichi Watari wrote:
> > Hi,
> > I'm trying to use thread specific data with mysqld but
> ran into a problem with my_errno generating Segmentation
> fault at the following line.
> > I know that my_errno is also thread specific data but
> not familiar with its implementation.
> > I'm using pthread_key_create(), pthread_setspecific()
> and pthread_getspecific() for my own thread specific data,
> is there something I should be aware of ?
> > Thanks,
> > Hiromichi
> >
> > p.s. I ran into this problem only if I try to use my
> own thread specific data, of course.
>
> probably you forgot to call my_thread_init() in the
> beginning of your
> thread function.
>
> Anyway, here's the code:
>
> #define my_errno my_thread_var->thr_errno
>
> #define my_thread_var (_my_thread_var())
>
> struct st_my_thread_var *_my_thread_var(void)
> {
> return my_pthread_getspecific(struct
> st_my_thread_var*,THR_KEY_mysys);
> }
>
> my_bool my_thread_init(void)
> {
> ...
> if (!(tmp= (struct st_my_thread_var *)
> calloc(1, sizeof(*tmp))))
> {
> error= 1;
> goto end;
> }
> pthread_setspecific(THR_KEY_mysys,tmp);
> ...
> }
>
> Regards,
> Sergei
>