update dev300-m58
[ooovba.git] / sal / osl / w32 / semaphor.c
blob643fac90cb2cfd23fbe89935c2a3335286466c09
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: semaphor.c,v $
10 * $Revision: 1.6 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #include "system.h"
33 #include <osl/diagnose.h>
34 #include <osl/semaphor.h>
37 Implemetation notes:
38 The void* represented by oslSemaphore is used
39 to store a WIN32 HANDLE.
43 /*****************************************************************************/
44 /* osl_createSemaphore */
45 /*****************************************************************************/
46 oslSemaphore SAL_CALL osl_createSemaphore(sal_uInt32 initialCount)
48 oslSemaphore Semaphore;
50 Semaphore= CreateSemaphore(0, initialCount, INT_MAX, 0);
52 /* create failed? */
53 if((HANDLE)Semaphore == INVALID_HANDLE_VALUE)
55 Semaphore= 0;
58 return Semaphore;
61 /*****************************************************************************/
62 /* osl_destroySemaphore */
63 /*****************************************************************************/
64 void SAL_CALL osl_destroySemaphore(oslSemaphore Semaphore)
68 if(Semaphore != 0)
70 CloseHandle((HANDLE)Semaphore);
75 /*****************************************************************************/
76 /* osl_acquireSemaphore */
77 /*****************************************************************************/
78 sal_Bool SAL_CALL osl_acquireSemaphore(oslSemaphore Semaphore)
80 OSL_ASSERT(Semaphore != 0);
82 switch ( WaitForSingleObject( (HANDLE)Semaphore, INFINITE ) )
84 case WAIT_OBJECT_0:
85 return sal_True;
87 default:
88 return (sal_False);
92 /*****************************************************************************/
93 /* osl_tryToAcquireSemaphore */
94 /*****************************************************************************/
95 sal_Bool SAL_CALL osl_tryToAcquireSemaphore(oslSemaphore Semaphore)
97 OSL_ASSERT(Semaphore != 0);
98 return (sal_Bool)(WaitForSingleObject((HANDLE)Semaphore, 0) == WAIT_OBJECT_0);
102 /*****************************************************************************/
103 /* osl_releaseSemaphore */
104 /*****************************************************************************/
105 sal_Bool SAL_CALL osl_releaseSemaphore(oslSemaphore Semaphore)
107 OSL_ASSERT(Semaphore != 0);
109 /* increase count by one, not interested in previous count */
110 return (sal_Bool)(ReleaseSemaphore((HANDLE)Semaphore, 1, NULL) != FALSE);