HP OpenVMS Systems

ask the wizard
Content starts here

Debugging application DEVALLOC error? (BASIC)

» close window

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"
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
 DEC$BASRTL                                 0 000000000000E3D8
----- above condition handler called with exception 00000844:
%SYSTEM-F-DEVALLOC, device already allocated to another user
----- end of exception message
                                            0 FFFFFFFF8B58859C
 DEC$BASRTL                                 0 000000000000A844
                                         1840 0000000000000984
                                            0 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.)

answer written or last revised on ( 24-FEB-2000 )

» close window