[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
_xvlock()
Lock a VM segment
------------------------------------------------------------------------------
C Prototype
#include "vm.api"
FARP _xvlock(
HANDLE hSegment
)
Arguments
hSegment is the VM segment handle returned by _xvalloc().
Returns
_xvlock() returns a far pointer to the base of the locked VM segment, or
a NULL pointer if the VM segment handle is not valid (i.e., does not
represent an allocated VM segment).
Description
_xvlock() guarantees that the VM segment is located in conventional
memory and cannot be moved or swapped. The pointer returned is valid
until the segment is unlocked using _xvunlock().
Note: A VM segment may be locked more than once. The VMM system
maintains, for each segment, a lock count (_xvlockcount()) which is
incremented each time you lock the segment and decremented each time you
unlock the segment. A segment is not physically unlocked until its lock
count is zero. You must eventually unlock all VM segments with
_xvunlock().
Warning! Do not leave a VM segment locked unnecessarily. Because
all locked segments reside in conventional memory, the more of them you
lock, the greater the chance of exhausting conventional memory.
Therefore, always unlock a VM segment with _xvunlock() when you are not
actively accessing it. Typically, this will mean locking and unlocking
the same VM segment several times within one function call.
If you have to lock a VM segment for an extended period of time, use
_xvwire(). This function places the VM segment in an area of the swap
space that least inhibits the VMM system.
Notes
. Error conditions: If there is not enough VM swap space available
for the segment to be loaded into conventional memory, the system
raises an internal error and halts.
. Garbage collection: The VMM system may take up to several seconds
to lock a VM segment if locking it triggers garbage collection. Use
_xvwire() for routines that require fast access to a buffer.
Examples
. This example allocates a segment with _xvalloc() and locks it
using _xvlock(). After a string is copied into the locked segment,
the segment is unlocked and freed (with _xvunlock() and _xvfree()):
// CA-Clipper include files
#include "extend.api"
#include "vm.api"
// Microsoft C include files
#include "string.h"
// Prototype
Boolean VMExample(char * spSrc);
Boolean VMExample(char * spSrc)
{
HANDLE hSegment;
char * spString;
Boolean bResult = FALSE;
if (hSegment = _xvalloc(strlen(spSrc) + 1, 0))
{
spString = _xvlock(hSegment);
if (spString != NULL)
{
strcpy(spString, spSrc);
.
. <statements>
.
bResult = TRUE;
_xvunlock(hSegment);
}
_xvfree(hSegment);
}
return (bResult);
}
Files Library is CLIPPER.LIB, header file is Vm.api.
See Also:
_xvalloc()
_xvlockcount()
_xvunlock()
_xvwire()
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson