This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: variadic arguments not thread safe on amd64?
On Mon, Apr 27, 2009 at 08:49:27PM -0700, Andrew Pinski wrote:
> On Mon, Apr 27, 2009 at 8:37 PM, Matt Provost <mprovost@termcap.net> wrote:
> > void tdebug(const char *format, ...) {
> > ?? ??va_list ap;
> > ?? ??pthread_mutex_lock(&m);
> > ?? ??mylog.format = format;
> > ?? ??va_start(ap, format);
> > ?? ??va_copy(mylog.ap, ap);
> > ?? ??pthread_cond_signal(&c);
> > ?? ??pthread_mutex_unlock(&m);
>
> You are missing two va_end's here
>
Yes I had a question about va_end in this situation. Putting one that
clears 'ap' seems fine but doesn't change anything. But if you va_end
the copy that you put in the struct, then what happens when the other
thread goes to use it? Or should the va_end for that be in the tprintlog
function after it's done with it?
In any case none of those combinations seem to affect the output.
Thanks,
Matt