msc@qubix.UUCP (07/07/83)
The article about missing the alarm signal and pausing forever
shows up a general problem with signals. It is possible
for a signal to be generated after a program tests some
condition and before it pauses thus causing the program to
pause forever. The system does NOT have to be heavily loaded
for this to happen. It happened to me when I was the only user
on a Sun.
It seems that signals need to be treated even more like
hardware interrupts. One should be able to disable them and
have signals sent during the disabled period saved for when
they are enabled again.
--
Mark
...{decvax,ucbvax}!decwrl!qubix!msc
...{ittvax,amd70}!qubix!msc
decwrl!qubix!msc@Berkeley.ARPAguy@rlgvax.UUCP (07/09/83)
4.?BSD does have such a facility for "raising the interrupt priority" of a
process and lowering it later, with the new signal mechanism. Saying
sigsys(sig, SIG_HOLD);
causes the signal to be remembered if it occurs, but not be presented to
the process; if the process changes the action for the signal, it is presented
to the process (or discarded if the action is changed to SIG_IGN). Furthermore,
you set the "interrupt new PSW" for the signal to set the signal to SIG_HOLD
rather than SIG_DFL by saying
sigsys(sig, DEFERSIG(routine));
which means that the signal action is reset to SIG_HOLD when "routine" is
entered. There are also facilities for dismissing signals more cleanly.
The UNIX signal mechanism does need work to make it useful for general
inter-process communication; UNIX also needs block-wakeup and message
mechanisms, both of which are in USG UNIX 5.0 (semaphores, message queues)
and the latter of which is in 4.1c/4.2BSD - the former can be simulated under
4.1c/4.2 with exclusive-use opens on a file. 4.1c/4.2 also has a more
elaborate signal mechanism.
Guy Harris
{seismo,mcnc,we13,brl-bmd,allegra}!rlgvax!guyjmc@root44.UUCP (07/11/83)
Personally I think that signals, along with file security are the two most mis-designed features of UNIX. In addition to missing a signal as described, you can get botches due to a second signal arriving, and not getting caught, before you have reset the catch routine. Then you can have them arriving in some other order from that in which they were sent because of the numerical ordering. Then you get botches like 'interrupted system call' to worry about on your I/O. John Collins Root Computers Ltd ...!vax135!ukc!root44!jmc