HP OpenVMS Systems

ask the wizard
Content starts here

Lock Manager Errors (CVTUNGRANT)?

» close window

The Question is:

We upgraded from 7.2 to 7.3.  Our software has about 30 locks that we use using
 the distributed lock manager.  This software isn't running on a cluster.  When
 the software starts up it performs an sys$enq to grant all the locks in CR
 mode.  From then unti
l the user exits the program we do lock conversions using just CR (Concurrent
 Read), PR (Protected Read) and PW (Protected Write).  These locks are never in
 PR or PW for more than a fraction of a second.  However they may stay in CR
 for long periods of ti
me.  Starting in 7.3 we frequently get the VMS error "Conversion of an
 ungranted lock".  Since this is running on approx 100 CPUs around the country
 on Police/Fire 911 systems, we are telling everyone not to upgrade to 7.3.
 The one site that did upgrade,
 the situation became unbearable, so we re-installed 7.2 and life is good
 again.  Is there any new timers that only allow you to hold a lock for a
 certain amount of time?  We keep all of our locks granted all of the time,
 they remain in CR mode when idle.
  We did some workarounds for this situation (i.e. if the software detects this
 error, then regrant the lock and continue), then we started getting lot's of
 deadlocks, which also shouldn't have occurred.
This software have been around for almost 20 years (lot's of changes), but the
 locking mechanism hasn't changed much since vms 3.x.  We will need a
 resolution before we can upgrade to 7.3 and beyond.

The Answer is :

  Probably the most common source of this error is a failure to correctly
  synchronize lock operation completions -- you cannot convert the lock
  until it has been granted.  The OpenVMS Wizard is aware of cases of
  this error when $ENQ is called -- rather than $ENQW, for instance --
  and its completion is not properly checked (eg: via a cal to $SYNCH)
  prior to the attempted lock conversion.  (At least one such case of
  this programming error was identified within an OpenVMS component.)
  Please see Ask The Wizard topic (1661) for a list of some of the more
  common programming errors.
  Errors due to unsynchronized completions are obviously dependent on
  timing, and there have been various performance enhancements made in
  the lock manager in recent OpenVMS releases -- the lock manager is
  rather faster with V7.2 and V7.3, and additional lock manager
  performance improvements are underway.
  There are no timers and no time-out on lock ownership.  That said,
  if you are using your own deadlock processing -- for instance, if
  you have a door-bell scheme and/or have a blocking AST routine that
  will (eventually) release the lock -- you will want to specify the
  LCK$M_NODLKBLK option on the $ENQ[W] call.
  As for the error itself:
 CVTUNGRANT,  cannot convert an ungranted lock
  Facility:     SYSTEM, System Services
  Explanation:  An attempt was made to convert a lock that is not granted.
                (Only locks that are granted may be converted to another lock
  User Action:  See the section on the lock management services in the OpenVMS
                System Services Reference Manual and correct your program.

answer written or last revised on ( 28-JUN-2001 )

» close window