tech-userlevel archive

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

Re: using backtrace(3) in libpthread



In article <20140425163750.GA11687%homeworld.netbsd.org@localhost>,
Emmanuel Dreyfus  <manu%netbsd.org@localhost> wrote:
>Hi
>
>I would like to obtain a backtrace using libexecinfo in 
>pthread_key_create() and pthread_key_delete(). I installed libexecinfo
>from pkgsrc and added the code below at the end of the two functions.
>
>I use snprintf()/syslog() because pthread__errorfunc() has comments
>telling this is the way to go to avoid deadlocks.... but I still deadlock. 
>Any idea how this should be done?
>
>        {
>                void *bt[BT_DEPTH];
>                char **btstr;
>                int depth; 
>                char buf[4096];
>                size_t len = 0;
>                int j;
> 
>                len += snprintf(buf + len, sizeof(buf) - len, "*** %s ***\n",
>                                __func__);
>                depth = backtrace(bt, BT_DEPTH);
>                btstr = backtrace_symbols(bt, depth);
>                for (j = 0; j < depth; j++) {
>                        len += snprintf(buf + len, 
>                                       sizeof(buf) - len, "#%d %s\n",
>                                        j, btstr[j]);
>                }
>
>                syslog(LOG_ERR | LOG_USER, "%s", buf);
>        }

You want syslog_r 

christos



Home | Main Index | Thread Index | Old Index