Patch to remove segfault on the exiting of a service.
[openais.git] / include / saLck.h
blobb45fdcf54642b3cac7cb976aaad64fbcdb87bdbb
1 /*
2 * Copyright (c) 2005 MontaVista Software, Inc.
4 * All rights reserved.
6 * Author: Steven Dake (sdake@mvista.com)
8 * This software licensed under BSD license, the text of which follows:
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are met:
13 * - Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * - Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * - Neither the name of the MontaVista Software, Inc. nor the names of its
19 * contributors may be used to endorse or promote products derived from this
20 * software without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32 * THE POSSIBILITY OF SUCH DAMAGE.
35 #ifndef SALCK_H_DEFINED
36 #define SALCK_H_DEFINED
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
42 typedef SaUint64T SaLckHandleT;
44 typedef SaUint64T SaLckLockIdT;
46 typedef SaUint64T SaLckResourceHandleT;
48 #define SA_LCK_LOCK_NO_QUEUE 0x1
49 #define SA_LCK_LOCK_ORPHAN 0x2
51 typedef SaUint32T SaLckLockFlagsT;
53 #define SA_LCK_RESOURCE_CREATE 0x1
55 typedef SaUint32T SaLckResourceOpenFlagsT;
57 typedef enum {
58 SA_LCK_LOCK_GRANTED = 1,
59 SA_LCK_LOCK_DEADLOCK = 2,
60 SA_LCK_LOCK_NOT_QUEUED = 3,
61 SA_LCK_LOCK_ORPHANED = 4,
62 SA_LCK_LOCK_NO_MORE = 5,
63 SA_LCK_LOCK_DUPLICATE_EX = 6
64 } SaLckLockStatusT;
66 typedef enum {
67 SA_LCK_PR_LOCK_MODE = 1,
68 SA_LCK_EX_LOCK_MODE = 2
69 } SaLckLockModeT;
71 #define SA_LCK_OPT_ORPHAN_LOCKS 0x1
72 #define SA_LCK_OPT_DEADLOCK_DETECTION 0x2
74 typedef SaUint32T SaLckOptionsT;
76 typedef SaUint64T SaLckWaiterSignalT;
78 typedef void (*SaLckResourceOpenCallbackT) (
79 SaInvocationT invocation,
80 SaLckResourceHandleT lockResourceHandle,
81 SaAisErrorT error);
83 typedef void (*SaLckLockGrantcallbackT) (
84 SaInvocationT invocation,
85 SaLckLockStatusT lockStatus,
86 SaAisErrorT error);
88 typedef void (*SaLckLockWaiterCallbackT) (
89 SaLckWaiterSignalT waiterSignal,
90 SaLckLockIdT lockId,
91 SaLckLockModeT modeHeld,
92 SaLckLockModeT modeRequested);
94 typedef void (*SaLckResourceUnlockCallbackT) (
95 SaInvocationT invocation,
96 SaAisErrorT error);
98 typedef struct {
99 SaLckResourceOpenCallbackT saLckResourceOpenCallback;
100 SaLckLockGrantcallbackT saLckLockGrantCallback;
101 SaLckLockWaiterCallbackT saLckLockWaiterCallback;
102 SaLckResourceUnlockCallbackT saLckResourceUnlockCallback;
103 } SaLckCallbacksT;
105 SaAisErrorT
106 saLckInitialize (
107 SaLckHandleT *lckHandle,
108 const SaLckCallbacksT *lckCallbacks,
109 SaVersionT *version);
111 SaAisErrorT
112 saLckSelectionObjectGet (
113 SaLckHandleT lckHandle,
114 SaSelectionObjectT *selectionObject);
116 SaAisErrorT
117 saLckOptionCheck (
118 SaLckHandleT lckHandle,
119 SaLckOptionsT *lckOptions);
121 SaAisErrorT
122 saLckDispatch (
123 SaLckHandleT lckHandle,
124 SaDispatchFlagsT dispatchFlags);
126 SaAisErrorT
127 saLckFinalize (
128 SaLckHandleT lckHandle);
130 SaAisErrorT
131 saLckResourceOpen (
132 SaLckHandleT lckHandle,
133 const SaNameT *lockResourceName,
134 SaLckResourceOpenFlagsT resourceFlags,
135 SaTimeT timeout,
136 SaLckResourceHandleT *lockResourceHandle);
138 SaAisErrorT
139 saLckResourceOpenAsync (
140 SaLckHandleT lckHandle,
141 SaInvocationT invocation,
142 const SaNameT *lockResourceName,
143 SaLckResourceOpenFlagsT resourceFlags);
145 SaAisErrorT
146 saLckResourceClose (
147 SaLckResourceHandleT lockResourceHandle);
149 SaAisErrorT
150 saLckResourceLock (
151 SaLckResourceHandleT lockResourceHandle,
152 SaLckLockIdT *lockId,
153 SaLckLockModeT lockMode,
154 SaLckLockFlagsT lockFlags,
155 SaLckWaiterSignalT waiterSignal,
156 SaTimeT timeout,
157 SaLckLockStatusT *lockStatus);
159 SaAisErrorT
160 saLckResourceLockAsync (
161 SaLckResourceHandleT lockResourceHandle,
162 SaInvocationT invocation,
163 SaLckLockIdT *lockId,
164 SaLckLockModeT lockMode,
165 SaLckLockFlagsT lockFlags,
166 SaLckWaiterSignalT waiterSignal);
168 SaAisErrorT
169 saLckResourceUnlock (
170 SaLckLockIdT lockId,
171 SaTimeT timeout);
173 SaAisErrorT
174 saLckResourceUnlockAsync (
175 SaInvocationT invocation,
176 SaLckLockIdT lockId);
178 SaAisErrorT
179 saLckLockPurge (
180 SaLckResourceHandleT lockResourceHandle);
182 #endif /* SALCK_H_DEFINED */