Merge pull request #4178 from ntherning/fix-broken-windows-build
[mono-project.git] / mono / metadata / w32semaphore-win32.c
blobbd6bdc97e8e3fcc7d749d0464a758e30e559e846
1 /*
2 * w32semaphore-win32.c: Runtime support for managed Semaphore on Win32
4 * Author:
5 * Ludovic Henry (luhenry@microsoft.com)
7 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
8 */
10 #include "w32semaphore.h"
12 #include <windows.h>
13 #include <winbase.h>
15 void
16 mono_w32semaphore_init (void)
20 #if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT | HAVE_UWP_WINAPI_SUPPORT)
21 gpointer
22 ves_icall_System_Threading_Semaphore_CreateSemaphore_internal (gint32 initialCount, gint32 maximumCount, MonoString *name, gint32 *error)
24 HANDLE sem;
26 sem = CreateSemaphore (NULL, initialCount, maximumCount, name ? mono_string_chars (name) : NULL);
28 *error = GetLastError ();
30 return sem;
32 #endif /* G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT | HAVE_UWP_WINAPI_SUPPORT) */
34 MonoBoolean
35 ves_icall_System_Threading_Semaphore_ReleaseSemaphore_internal (gpointer handle, gint32 releaseCount, gint32 *prevcount)
37 return ReleaseSemaphore (handle, releaseCount, prevcount);
40 gpointer
41 ves_icall_System_Threading_Semaphore_OpenSemaphore_internal (MonoString *name, gint32 rights, gint32 *error)
43 HANDLE sem;
45 sem = OpenSemaphore (rights, FALSE, mono_string_chars (name));
47 *error = GetLastError ();
49 return sem;