|
From: Julian S. <js...@ac...> - 2006-01-13 13:04:24
|
On Friday 13 January 2006 09:59, Tom Hughes wrote: > Is it just me or is the assertion on line 633 of scheduler.c back > to front? It is processed when a signal occurs while running the > unredirected version of a wrapped function and reads: > > vg_assert(argblock[3] == argblock[1]); /* iow, trc was not set */ > > Now argblock[3] only seems to be set if the function runs to > completion so if I understand that comment right the assertion > is checking that in the signal case no return code had been set > in which case that should be a != test I think? > > Certainly that assertion currently fires for me if a segmentation > fault occurs running the real version of a wrapped function. Yes. The assertion is bogus. If a signal occurred and the sighandler longjmp'd then [3] will not get written at all - hence is zero. So the assertion should be vg_assert(argblock[3] == 0). I've committed a fix and comments. Well spotted. I presume the signal was caused by the unredir tc being non-executable for you and so in any case r5525 fixed it? J |