Messages in this thread | | | Date | Sat, 05 Jan 2008 19:35:09 +0000 | Subject | Re: strace, accept(), ERESTARTSYS and EINTR | From | "Phil Endecott" <> |
| |
Andreas Schwab wrote: > "Phil Endecott" <phil_wueww_endecott@chezphil.org> writes: >> Andreas Schwab wrote: >>> "Phil Endecott" <phil_wueww_endecott@chezphil.org> 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.
| |