On Mon, Apr 27, 2009 at 9:00 PM, Matt Provost <mprov...@termcap.net> wrote:
> On Mon, Apr 27, 2009 at 08:49:27PM -0700, Andrew Pinski wrote:
>> On Mon, Apr 27, 2009 at 8:37 PM, Matt Provost <mprov...@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.
>

va_list points to stack memory. Are you passing pointer to stack memory
from one thread to another? How is this behavior defined?


-- 
H.J.

Reply via email to