Re: strace, accept(), ERESTARTSYS and EINTR

From: Phil Endecott
Date: Sat Jan 05 2008 - 14:35:33 EST


Andreas Schwab wrote:
"Phil Endecott" <phil_wueww_endecott@xxxxxxxxxxxx> writes:
Andreas Schwab wrote:
"Phil Endecott" <phil_wueww_endecott@xxxxxxxxxxxx> writes:
However, there's a lot of code and I know that there are bugs in it. I
just want to focus on the kernel-related issue that the strace fragment
that I posted brings up: even if my user code gets completely screwed up
(corrupts its stack, runs out of FDs/VM/threads etc), I don't think that I
should see in the strace output that accept() has returned
ERESTARTSYS.

strace always sees the raw return value, before the signal handler is
executed and before the check for syscall restart is done.

Yes, but I should see the real final return value in another strace output
line before I see that thread doing something else. Correct?

No. As far as strace is concerned the syscall has finished. Since it
isn't restarted, you won't see it again in the trace.

Sorry for being dense, but what is the implication of your comment "Since it isn't restarted" ? Are you saying that the kernel isn't going to restart it and will have converted it to EINTR and returned that to user-space, and that this modified return value is not reported by strace?


Phil.




--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/