return FileUnlockIntrinsic((FileLockToken *) lockToken);
}
-
-/*
- *----------------------------------------------------------------------
- *
- * FileLock_DeleteFileVMX --
- *
- * The VMX file delete primitive.
- *
- * Results:
- * 0 unlocked
- * >0 errno
- *
- * Side effects:
- * Changes the host file system.
- *
- * Note:
- * THIS IS A HORRIBLE HACK AND NEEDS TO BE REMOVED ASAP!!!
- *
- *----------------------------------------------------------------------
- */
-
-int
-FileLock_DeleteFileVMX(ConstUnicode filePath) // IN:
-{
- int err;
- Unicode normalizedPath;
-
- ASSERT(filePath);
-
- normalizedPath = FileLockNormalizePath(filePath);
- if (normalizedPath == NULL) {
- err = EINVAL;
- } else {
- err = FileLockHackVMX(normalizedPath);
-
- Unicode_Free(normalizedPath);
- }
-
- return err;
-}
-
#else
/*
return Unicode_Duplicate(lockToken->pathName);
}
-
-
-/*
- *-----------------------------------------------------------------------------
- *
- * ScannerVMX --
- *
- * VMX hack scanner
- *
- * Results:
- * 0 success
- * > 0 error (errno)
- *
- * Side effects:
- * None.
- *
- *-----------------------------------------------------------------------------
- */
-
-static int
-ScannerVMX(ConstUnicode lockDir, // IN:
- ConstUnicode fileName, // IN:
- LockValues *memberValues, // IN:
- LockValues *myValues) // IN/OUT:
-{
- ASSERT(lockDir);
- ASSERT(fileName);
-
- myValues->lamportNumber++;
-
- return 0;
-}
-
-
-/*
- *----------------------------------------------------------------------
- *
- * FileLockHackVMX --
- *
- * The VMX file delete primitive.
- *
- * Results:
- * 0 unlocked
- * > 0 errno
- *
- * Side effects:
- * Changes the host file system.
- *
- * Note:
- * THIS IS A HORRIBLE HACK AND NEEDS TO BE REMOVED ASAP!!!
- *
- *----------------------------------------------------------------------
- */
-
-int
-FileLockHackVMX(ConstUnicode pathName) // IN:
-{
- int err;
- LockValues myValues;
-
- Unicode lockDir = NULL;
- Unicode entryFilePath = NULL;
- Unicode memberFilePath = NULL;
- Unicode entryDirectory = NULL;
-
- ASSERT(pathName);
-
- /* first the locking directory path name */
- lockDir = Unicode_Append(pathName, FILELOCK_SUFFIX);
-
- /* establish our values */
- myValues.machineID = (char *) FileLockGetMachineID(); // don't free this!
- myValues.executionID = FileLockGetExecutionID(); // free this!
- myValues.locationChecksum = FileLockLocationChecksum(lockDir); // free this!
- myValues.lamportNumber = 0;
- myValues.memberName = NULL;
-
- LOG(1, ("%s on %s (%s, %s).\n", __FUNCTION__, UTF8(pathName),
- myValues.machineID, myValues.executionID));
-
- err = CreateEntryDirectory(lockDir, &entryDirectory, &entryFilePath,
- &memberFilePath, &myValues.memberName);
-
- if (err != 0) {
- goto bail;
- }
-
- /* Scan the lock directory */
- err = Scanner(lockDir, ScannerVMX, &myValues, FALSE);
-
- if (err == 0) {
- /* if no members are valid, clean up */
- if (myValues.lamportNumber == 1) {
- FileDeletionRobust(pathName, FALSE);
- }
- } else {
- if (vmx86_debug) {
- Warning(LGPFX" %s clean-up failure for '%s': %s\n",
- __FUNCTION__, UTF8(pathName), strerror(err));
- }
- }
-
- /* clean up */
- FileRemoveDirectoryRobust(entryDirectory);
- FileRemoveDirectoryRobust(lockDir);
-
-bail:
-
- Unicode_Free(lockDir);
- Unicode_Free(entryDirectory);
- Unicode_Free(entryFilePath);
- Unicode_Free(memberFilePath);
- Unicode_Free(myValues.memberName);
- free(myValues.locationChecksum);
- free(myValues.executionID);
-
- return err;
-}