MANNS%DBNPIB5.BITNET@cunyvm.cuny.edu (Jochen Manns, PI der Uni Bonn, 732738/3611) (01/04/91)
Dear UNIX programmers,
I got the following problem with a signal handler and the
global 'errno' variable:
a) there is a main program, doing something like semop or
select in the form:
while ( system_call() == -1 )
if ( errno != EINTR )
fatal_error();
b) now, a signal handler is installed via 'alarm', which has
various tasks. Especially it may get some 'errno' from the
system calls it makes.
c) so, if the handler interrupts the system_call in the main
this call will fail with EINTR - no problem so far. But if
the handler is called again before EINTR is checked - which
is possible in a heavy loaded multitasking system even when
using 'alarm' - this may crash the program when it becomes
a modified 'errno'.
For now I keep track on 'errno' in the signal handler but I
want to ask you if there is no better method to solve such
problems. Is't it a general problem with handlers? Can some
of you give me some hints on that problem?
Jochen Manns
Physikalisches Institut der Universitaet Bonn
Nussallee 12
5300 Bonn 1
(Germany)brnstnd@kramden.acf.nyu.edu (Dan Bernstein) (01/05/91)
In article <25390@adm.brl.mil> MANNS%DBNPIB5.BITNET@cunyvm.cuny.edu (Jochen Manns, PI der Uni Bonn, 732738/3611) writes: [ a signal handler may modify errno ] > For now I keep track on 'errno' in the signal handler but I > want to ask you if there is no better method to solve such > problems. Saving and restoring errno is the correct method. The only ``better'' solution is not to make system calls inside handlers in the first place. ---Dan