>The following program executes differently on Digital's UNIX and Public
>Domain Linux (V1.1.59). The intention of the program is to test whether
>an O/S blocks delivery of SIGVTALRM before the signal handler from a previous
>SIGVTALRM can complete.
>The test is really simple. The signal handler, timer_func(), just executes a
>tight loop for a period longer than that set by setitimer and maintains a
>count of the number of times timer_func() is reentered. Thus, if the OS
>delivers a SIGVTALRM while timer_func() is in progress, its reentry_count
>incremented.
>On Digital's UNIX V3.2 (nee OSF/1), timer_func() is reentered, just as you
>would expect if the OS delivers all signals no matter what signal may be
>in progress. On Linux V1.1.59, just the opposite occurs. Running on a
>Pentium 90, no matter how long I arrange for timer_func() to execute, a
>second SIGVTALRM is *never* delivered.
have the POSIX standard before me, but I have read the relevant sections.
When a signal is delivered, and the handler executed, the signal being
delivered should be automatically blocked until the signal handler
returns.
I encountered the same problem on a version (don't remember which) of
Interactive Unix, with the SIGUSR1 signal, when we were porting a
product to that environment. I notified the supplier, and they sent me
a newer version of the OS, where the problem was fixed. But this
worries me, since we are just planning to port the same product
to DecUnix :-(
Anders