kernel32/tests: Shared lock can overlap exclusive if handles are equal.
This commit is contained in:
parent
bfdc93cdc5
commit
b2a302b667
|
@ -1591,7 +1591,7 @@ static void test_offset_in_overlapped_structure(void)
|
||||||
|
|
||||||
static void test_LockFile(void)
|
static void test_LockFile(void)
|
||||||
{
|
{
|
||||||
HANDLE handle;
|
HANDLE handle, handle2;
|
||||||
DWORD written;
|
DWORD written;
|
||||||
OVERLAPPED overlapped;
|
OVERLAPPED overlapped;
|
||||||
int limited_LockFile;
|
int limited_LockFile;
|
||||||
|
@ -1606,6 +1606,14 @@ static void test_LockFile(void)
|
||||||
ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError());
|
ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
handle2 = CreateFileA( filename, GENERIC_READ | GENERIC_WRITE,
|
||||||
|
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
|
||||||
|
OPEN_EXISTING, 0, 0 );
|
||||||
|
if (handle2 == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
ok( 0, "couldn't open file \"%s\" (err=%d)\n", filename, GetLastError() );
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
ok( WriteFile( handle, sillytext, strlen(sillytext), &written, NULL ), "write failed\n" );
|
ok( WriteFile( handle, sillytext, strlen(sillytext), &written, NULL ), "write failed\n" );
|
||||||
|
|
||||||
ok( LockFile( handle, 0, 0, 0, 0 ), "LockFile failed\n" );
|
ok( LockFile( handle, 0, 0, 0, 0 ), "LockFile failed\n" );
|
||||||
|
@ -1656,6 +1664,23 @@ static void test_LockFile(void)
|
||||||
"UnlockFileEx 150,100 again succeeded\n" );
|
"UnlockFileEx 150,100 again succeeded\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* shared lock can overlap exclusive if handles are equal */
|
||||||
|
S(U(overlapped)).Offset = 300;
|
||||||
|
ok( LockFileEx( handle, LOCKFILE_EXCLUSIVE_LOCK, 0, 100, 0, &overlapped ),
|
||||||
|
"LockFileEx exclusive 300,100 failed\n" );
|
||||||
|
ok( !LockFileEx( handle2, LOCKFILE_FAIL_IMMEDIATELY, 0, 100, 0, &overlapped ),
|
||||||
|
"LockFileEx handle2 300,100 succeeded\n" );
|
||||||
|
ret = LockFileEx( handle, LOCKFILE_FAIL_IMMEDIATELY, 0, 100, 0, &overlapped );
|
||||||
|
todo_wine
|
||||||
|
ok( ret, "LockFileEx 300,100 failed\n" );
|
||||||
|
ok( UnlockFileEx( handle, 0, 100, 0, &overlapped ), "UnlockFileEx 300,100 failed\n" );
|
||||||
|
/* exclusive lock is removed first */
|
||||||
|
ok( LockFileEx( handle2, LOCKFILE_FAIL_IMMEDIATELY, 0, 100, 0, &overlapped ),
|
||||||
|
"LockFileEx handle2 300,100 failed\n" );
|
||||||
|
ok( UnlockFileEx( handle2, 0, 100, 0, &overlapped ), "UnlockFileEx 300,100 failed\n" );
|
||||||
|
if (ret)
|
||||||
|
ok( UnlockFileEx( handle, 0, 100, 0, &overlapped ), "UnlockFileEx 300,100 failed\n" );
|
||||||
|
|
||||||
ret = LockFile( handle, 0, 0x10000000, 0, 0xf0000000 );
|
ret = LockFile( handle, 0, 0x10000000, 0, 0xf0000000 );
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
|
@ -1689,6 +1714,8 @@ static void test_LockFile(void)
|
||||||
|
|
||||||
ok( UnlockFile( handle, 100, 0, 0, 0 ), "UnlockFile 100,0 failed\n" );
|
ok( UnlockFile( handle, 100, 0, 0, 0 ), "UnlockFile 100,0 failed\n" );
|
||||||
|
|
||||||
|
CloseHandle( handle2 );
|
||||||
|
cleanup:
|
||||||
CloseHandle( handle );
|
CloseHandle( handle );
|
||||||
DeleteFileA( filename );
|
DeleteFileA( filename );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue