![]() |
Software > OpenVMS Systems > Ask the Wizard ![]() HP OpenVMS Systemsask the wizard |
![]() |
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.)
|