Tizen 2.1 base
[platform/upstream/gcd.git] / dispatch-1.0 / src / semaphore_internal.h
1 /*
2  * Copyright (c) 2008-2009 Apple Inc. All rights reserved.
3  *
4  * @APPLE_APACHE_LICENSE_HEADER_START@
5  * 
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  * 
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  * 
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  * 
18  * @APPLE_APACHE_LICENSE_HEADER_END@
19  */
20
21 /*
22  * IMPORTANT: This header file describes INTERNAL interfaces to libdispatch
23  * which are subject to change in future releases of Mac OS X. Any applications
24  * relying on these interfaces WILL break.
25  */
26
27 #ifndef __DISPATCH_SEMAPHORE_INTERNAL__
28 #define __DISPATCH_SEMAPHORE_INTERNAL__
29
30 struct dispatch_sema_notify_s {
31         struct dispatch_sema_notify_s *dsn_next;
32         dispatch_queue_t dsn_queue;
33         void *dsn_ctxt;
34         void (*dsn_func)(void *);
35 };
36
37 struct dispatch_semaphore_s {
38         DISPATCH_STRUCT_HEADER(dispatch_semaphore_s, dispatch_semaphore_vtable_s);
39         long dsema_value;
40         long dsema_orig;
41         size_t dsema_sent_ksignals;
42 #if USE_MACH_SEM && USE_POSIX_SEM
43 #error "Too many supported semaphore types"
44 #elif USE_MACH_SEM
45         semaphore_t dsema_port;
46         semaphore_t dsema_waiter_port;
47 #elif USE_POSIX_SEM
48         sem_t dsema_sem;
49 #else
50 #error "No supported semaphore type"
51 #endif
52         size_t dsema_group_waiters;
53         struct dispatch_sema_notify_s *dsema_notify_head;
54         struct dispatch_sema_notify_s *dsema_notify_tail;
55 };
56
57 extern const struct dispatch_semaphore_vtable_s _dispatch_semaphore_vtable;
58
59 #endif