1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: semaphor.c,v $
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 ************************************************************************/
33 #include <osl/diagnose.h>
34 #include <osl/semaphor.h>
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);
53 if((HANDLE
)Semaphore
== INVALID_HANDLE_VALUE
)
61 /*****************************************************************************/
62 /* osl_destroySemaphore */
63 /*****************************************************************************/
64 void SAL_CALL
osl_destroySemaphore(oslSemaphore Semaphore
)
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
) )
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
);