DosCancelLockRequestL
Description
DosCancelLockRequestL cancels an outstanding DosSetFileLocksL request.
Syntax
#define INCL DOSFILEMGR
#include os2.h
APIRET DosCancelLockRequestL (HFILE hFile, PFILELOCKL pflLock)
Parameters
- hFile HFILE) input
- File handle used in the DosSetFileLocksL function that is to be cancelled.
- pflLockL PFILELOCKL) input
- Address of the structure describing the lock request to cancel.
Return Code
ulrc APIRET) returns
DosCancelLockRequestL returns one of the following values
- 0 NO_ERROR
- ERROR_INVALID_HANDLE
- 87 ERROR_INVALID_PARAMETER
- 173 ERROR_CANCEL_VIOLATION
Remarks
DosCancelLockRequestL allows a process to cancel the lock range request of an outstanding DosSetFileLocksL function.
If two threads in a process are waiting on a lock file range, and another thread issues DosCancelLockRequestL for that lock file range, then both waiting threads are released.
Not all file-system drivers (FSDs) can cancel an outstanding lock request.
Local Area Network (LAN) servers cannot cancel an outstanding lock request if they use a version of the operating system prior to OS/2 Version 2.00.
Example Code
This example opens a file named CANLOCK.DAT , locks a block of the data, writes some data to it, and then cancels the lock request.
#define INCL_DOSFILEMGR /* File Manager values */#define INCL_DOSERRORS /* DOS Error values */
#include os2.h
#include stdio.h
#include string.h
int main(VOID)
HFILE FileHandle = NULLHANDLE; /* File handle */
ULONG Action = 0, /* Action taken by DosOpenL */
Wrote = 0; /* Number of bytes written by DosWrite */
CHAR FileData 40 = "Forty bytes of demonstration text data\r\n";
APIRET rc = NO_ERROR; /* Return code */
FILELOCKL LockArea = 0 , /* Area of file to lock */
UnlockArea = 0 ; /* Area of file to unlock */
rc = DosOpenL("canlock.dat", /* File to open */
FileHandle, /* File handle */
Action, /* Action taken */
256, /* File primary allocation */
FILE_ARCHIVED, /* File attributes */
FILE_OPEN | FILE_CREATE, /* Open function type */
OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE,
0L); /* No extended attributes */
if (rc != NO_ERROR) /* If open failed */
printf("DosOpenL error return code = %u\n", rc);
return 1;
LockArea.lOffset = 0; /* Start locking at beginning of file */
LockArea.lRange = 40; /* Use a lock range of 40 bytes */
UnLockArea.lOffset = 0; /* Start unlocking at beginning of file */
UnLockArea.lRange = 0; /* Use a unlock range of 0 bytes */
rc = DosSetFileLocksL(FileHandle, /* File handle */
UnlockArea, /* No unlock area */
LockArea, /* Lock current record */
2000L, /* Lock time-out value of 2 seconds */
0L); /* Exclusive lock, not atomic */
if (rc != NO_ERROR)
printf("DosSetFileLocks error return code = %u\n", rc);
return 1;
rc = DosWrite(FileHandle, FileData, sizeof(FileData), Wrote);
if (rc != NO_ERROR)
printf("DosWrite error return code = %u\n", rc);
return 1;
/* Should check if (rc != NO_ERROR) here... */
LockArea.lOffset = 0; /* Start locking at beginning of file */
LockArea.lRange = 0; /* Use a lock range of 40 bytes */
UnLockArea.lOffset = 0; /* Start locking at beginning of file */
UnLockArea.lRange = 40; /* Use a lock range of 40 bytes */
rc = DosSetFileLocksL(FileHandle, /* File handle */
UnlockArea, /* Unlock area */
LockArea, /* No Lock */
2000L, /* Lock time-out value of 2 seconds */
0L); /* Exclusive lock, not atomic */
if (rc != NO_ERROR)
printf("DosSetFileLocksL error return code = %u\n", rc);
return 1;
rc = DosClose(FileHandle);
/* Should check if (rc != NO_ERROR) here... */
return NO_ERROR;
rc = DosClose(FileHandle);
/* Should check if (rc != NO_ERROR) here... */
return NO_ERROR;