|
From: Tom H. <th...@cy...> - 2003-10-21 18:16:54
|
In message <106...@ix...>
Jeremy Fitzhardinge <je...@go...> wrote:
> This is a large, complex change. I've been testing it pretty
> extensively, but I expect there's still some bugs in there (I found one
> just before checking in). Please sync to CVS HEAD and try it out on
> your favorite programs.
I've another problem now - all attempts to send SIGINT or SIGKILL seem
to be suppressed for some reason. We have some code which does this:
kill( child, SIGKILL );
waitpid( child, &status, 0 );
Unfortunately this is now hanging because the pre-syscall action for
kill looks like this:
PRE(kill)
{
/* int kill(pid_t pid, int sig); */
MAYBE_PRINTF("kill ( %d, %d )\n", arg1,arg2);
if (arg2 == VKI_SIGVGINT || arg2 == VKI_SIGVGKILL)
res = -VKI_EINVAL;
}
Because this suppresses SIGKILL the waitpid then hangs...
Actually there is something even more bizarre than that happening
as we only actually do the waitpid if the kill succeeds, but we still
seem to be hanging in waitpid, as shown:
SYSCALL[14042,1]( 37):kill ( 14080, 9 )
SYSCALL[14042,1](114) blocking:wait4 ( 14080, 0xBFFF69F0, 0, 0x0 )
Anyway, the point is that it's highly antisocial to mysteriously
break kill for certain signals, and I can't see an obvious reason
for it.
Tom
--
Tom Hughes (th...@cy...)
Software Engineer, Cyberscience Corporation
http://www.cyberscience.com/
|