[darcs-users] push --and-apply
Aggelos Economopoulos
aoiko at cc.ece.ntua.gr
Tue Sep 16 22:29:58 UTC 2003
On Tuesday 16 September 2003 16:26, David Roundy wrote:
> On Tue, Sep 16, 2003 at 05:21:57AM +0300, Aggelos Economopoulos wrote:
[...]
> > Any clues?
>
> Yuck. I also ran into this problem when testing the curl (as opposed to
> libcurl) version. I don't properly understand it, and so I came up with a
> very crude hack for copyRemoteCmd, which was to retry every time I failed
> due to a SIGVTALARM interrupt. This worked because the error was only
> sporadic. It may also be sporadic in the scp case, I just don't know.
>
> As I understand it (and I don't very well), the virtual timer is an
> interrupt timer that gets called when a certain amount of CPU time is used
> by a process. When it is called, the process dies, and that is what is
> happening. What I don't know is why the timer is getting set in the first
> place. My only guess is that for some reason execvp is setting the timer.
> Either that or it is getting set when I fork.
After grepping a while in a ghc5 source tree, it seems neither is true. The
timer seems to be set for the program irrespective of the fork/exec syscalls.
The runtime appears to use it (the timer) for profiling itself (which is one
obvious usage of setitimer()/getitimer()) - see ghc-5/ghc/rts/Itimer.c .
Obviously the signal handlers are thrown away during the exec, so the new
process gets an unexpected SIGVTALRM and dies.
Unless I'm missing something, we are talking about a ghc bug. ghc has a
pPrPr_disableITimers function which it calls e.g. in executeFile, but some
paths leading to execve(2) are probably left unprotected. Copying
pPrPr_disableITimers from ghc (which does no error checking and unnecessarily
clears .it_interval) and calling it from read_ssh should work (if I'm right).
Does this sound logical?
Aggelos
More information about the darcs-users
mailing list