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.) 
 
 
  |