 |
The Question is:
I have developed 4 programs with BASIC version 1.3 on Alpha system and
found that sometime these 4 processes die at the same time. They didn't die
frequently and it's hard to simulate how they die. The same characterestic
of these 4 processes is that
they mainly use command SLEEP() in basic.
I quite serious about this problem. I want to know why they died and if
I didn't use command SLEEP() what command I should use instead of SLEEP()
PS: I send error log from one of 4 processes to you, but they had the same
error that "DEVALLOC"
Regards,
Fiona Xiao
%SYSTEM-F-DEVALLOC, device already allocated to another user
%TRACE-F-TRACEBACK, symbolic stack dump follows
image module routine line rel PC abs PC
0 FFFFFFFF80443DE0
FFFFFFFF80443DE0
DEC$BASRTL 0 000000000000E3D8
000000000E4F03D8
----- above condition handler called with exception 00000844:
%SYSTEM-F-DEVALLOC, device already allocated to another user
----- end of exception message
0 FFFFFFFF8B58859C
FFFFFFFF8B58859C
DEC$BASRTL 0 000000000000A844
000000000E4EC844
ASTMKTBO ASTMKTBO$MAIN ASTMKTBO$MAIN
1840 0000000000000984
0000000000020984
0 FFFFFFFF8B6D70D8
FFFFFFFF8B6D70D8
The Answer is :
A device-allocated (DEVALLOC) error does not normally imply a problem
with the SLEEP function exists -- the OpenVMS Wizard expects that a
latent bug exists in the application, and would encourage looking at
topic 1661 for a list of some of the more common programming problems
found lurking within applications.
That said, it is possible to receive a DEVALLOC error from SLEEP.
The SLEEP function can be cancelled by hitting CR on the terminal,
and SLEEP does this by checking if SYS$INPUT is a terminal. If it is,
then a channel is $ASSIGNed and an I/O is posted. So, if SYS$INPUT is
a terminal allocated to another process, the SLEEP call can signal a
DEVALLOC (via LIB$STOP) error. (If this is not desired, you can
start up the detached processes with /INPUT=NLA0: or similar...)
The OpenVMS Wizard would recommend examining the code around line
1840 in the program in particular.
The OpenVMS Wizard will assume that the SLEEP is being used in some
sort of test-loop, and that there are cases where multiple processes
are in contention with each other for a resource or device, and this
contention can occasionally lead to incidence of DEVALLOC errors.
As for trapping the error, the OpenVMS Wizard suggests using the
OpenVMS debugger -- you can set a breakpoint on an exception, and
you can also set breakpoints on various error paths. You can also
create an application-specific trace log file, but this is often
unnecessary with smaller programs as the debugger can suffice.
(Without details of what is going on in the program -- particularly
around and leading up to line 1840 in the pgram -- the OpenVMS Wizard
cannot predict cause of the problem.)
 |
|
|
 |
|