summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/threading/ReleaseMutex/test3/ReleaseMutex.cpp
blob: 5f6adb0419e882e8267020e5b485058265ddc069 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

/*============================================================
**
** Source: ReleaseMutex/test3/ReleaseMutex.c
**
** Purpose: Test failure code for ReleaseMutex. 
**
** Dependencies: CreateMutex
**               ReleaseMutex
**               CreateThread
** 

**
**=========================================================*/

#include <palsuite.h>

DWORD dwTestResult;  /* global for test result */

DWORD dwThreadId;  /* consumer thread identifier */

HANDLE hMutex;  /* handle to mutex */

HANDLE hThread;  /* handle to thread */

/* 
 * Thread function. 
 */
DWORD
PALAPI 
ThreadFunction( LPVOID lpNoArg )
{

    dwTestResult = ReleaseMutex(hMutex);

    return 0;
}

int __cdecl main (int argc, char **argv) 
{

    if(0 != (PAL_Initialize(argc, argv)))
    {
        return (FAIL);
    }

    /*
     * set dwTestResult so test fails even if ReleaseMutex is not called
     */
    dwTestResult = 1;

    /*
     * Create mutex
     */
    hMutex = CreateMutexW (
	NULL,
	TRUE,
	NULL);

    if ( NULL == hMutex ) 
    {
        Fail ( "hMutex = CreateMutex () - returned NULL\n"
		 "Failing Test.\nGetLastError returned %d\n", GetLastError());
    }

    /* 
     * Create ThreadFunction
     */
    hThread = CreateThread(
	NULL, 
	0,    
	ThreadFunction,
	NULL,          
	0,             
	&dwThreadId);  

    if ( NULL == hThread ) 
    {

	Fail ( "CreateThread() returned NULL.  Failing test.\n"
		 "GetLastError returned %d\n", GetLastError());
    }
    
    /*
     * Wait for ThreadFunction to complete
     */
    WaitForSingleObject (hThread, INFINITE);
    
    if (dwTestResult)
    {
	Fail ("ReleaseMutex() test was expected to return 0.\n" 
		"It returned %d.  Failing test.\n", dwTestResult );
    }

    Trace ("ReleaseMutex() test returned 0.\nTest passed.\n");

    PAL_Terminate();
    return ( PASS );

}