/src/libhevc/encoder/osal_mutex.c
Line | Count | Source (jump to first uncovered line) |
1 | | /****************************************************************************** |
2 | | * |
3 | | * Copyright (C) 2018 The Android Open Source Project |
4 | | * |
5 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | | * you may not use this file except in compliance with the License. |
7 | | * You may obtain a copy of the License at: |
8 | | * |
9 | | * http://www.apache.org/licenses/LICENSE-2.0 |
10 | | * |
11 | | * Unless required by applicable law or agreed to in writing, software |
12 | | * distributed under the License is distributed on an "AS IS" BASIS, |
13 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 | | * See the License for the specific language governing permissions and |
15 | | * limitations under the License. |
16 | | * |
17 | | ***************************************************************************** |
18 | | * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore |
19 | | */ |
20 | | |
21 | | /*****************************************************************************/ |
22 | | /* */ |
23 | | /* File Name : osal_mutex.c */ |
24 | | /* */ |
25 | | /* Description : This file contains all the necessary function */ |
26 | | /* definitions required to operate on mutex */ |
27 | | /* */ |
28 | | /* List of Functions : osal_get_mutex_handle_size */ |
29 | | /* osal_mutex_create */ |
30 | | /* osal_mutex_destroy */ |
31 | | /* osal_mutex_lock */ |
32 | | /* osal_mutex_lock_timed */ |
33 | | /* osal_mutex_unlock */ |
34 | | /* */ |
35 | | /* Issues / Problems : None */ |
36 | | /* */ |
37 | | /* Revision History : */ |
38 | | /* */ |
39 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
40 | | /* 20 03 2006 Ittiam Draft */ |
41 | | /* */ |
42 | | /*****************************************************************************/ |
43 | | |
44 | | /*****************************************************************************/ |
45 | | /* File Includes */ |
46 | | /*****************************************************************************/ |
47 | | |
48 | | /* System include files */ |
49 | | #include <stdio.h> |
50 | | |
51 | | #include <errno.h> |
52 | | #include <semaphore.h> |
53 | | #include <pthread.h> |
54 | | #include <time.h> |
55 | | |
56 | | /* User include files */ |
57 | | #include "cast_types.h" |
58 | | #include "osal.h" |
59 | | #include "osal_handle.h" |
60 | | #include "osal_mutex.h" |
61 | | |
62 | | /*****************************************************************************/ |
63 | | /* */ |
64 | | /* Function Name : osal_mutex_create */ |
65 | | /* */ |
66 | | /* Description : This function creates the mutex and returns the handle */ |
67 | | /* to the user. */ |
68 | | /* */ |
69 | | /* Inputs : OSAL handle */ |
70 | | /* Pointer to Memory manager handle */ |
71 | | /* */ |
72 | | /* Globals : None */ |
73 | | /* */ |
74 | | /* Processing : Allocates memory for Mutex handle and calls OS specific */ |
75 | | /* mutex create API call. */ |
76 | | /* */ |
77 | | /* Outputs : Mutex handle */ |
78 | | /* */ |
79 | | /* Returns : On SUCCESS - Mutex handle */ |
80 | | /* On FAILURE - NULL */ |
81 | | /* */ |
82 | | /* Issues : None */ |
83 | | /* */ |
84 | | /* Revision History: */ |
85 | | /* */ |
86 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
87 | | /* 20 03 2006 Ittiam Draft */ |
88 | | /* */ |
89 | | /*****************************************************************************/ |
90 | | |
91 | | void *osal_mutex_create(IN void *osal_handle) |
92 | 177k | { |
93 | 177k | void *mmr_handle = 0; |
94 | | |
95 | | /* Currenlty naming semaphores is not supported */ |
96 | 177k | { |
97 | 177k | osal_t *handle = osal_handle; |
98 | 177k | mutex_handle_t *mutex_handle = 0; |
99 | | |
100 | 177k | if(0 == handle || 0 == handle->alloc || 0 == handle->free) |
101 | 0 | return 0; |
102 | | |
103 | | /* Initialize MMR handle */ |
104 | 177k | mmr_handle = handle->mmr_handle; |
105 | | |
106 | | /* Allocate memory for the Handle */ |
107 | 177k | mutex_handle = handle->alloc(mmr_handle, sizeof(mutex_handle_t)); |
108 | | |
109 | | /* Error in memory allocation */ |
110 | 177k | if(0 == mutex_handle) |
111 | 0 | return 0; |
112 | | |
113 | 177k | mutex_handle->mmr_handle = mmr_handle; |
114 | 177k | mutex_handle->hdl = handle; |
115 | | |
116 | | /* Create semaphore */ |
117 | 177k | if(0 != pthread_mutex_init(&(mutex_handle->mutex_handle), NULL)) |
118 | 0 | { |
119 | 0 | handle->free(mmr_handle, mutex_handle); |
120 | 0 | return 0; |
121 | 0 | } |
122 | | |
123 | 177k | return mutex_handle; |
124 | 177k | } |
125 | 177k | } |
126 | | |
127 | | /*****************************************************************************/ |
128 | | /* */ |
129 | | /* Function Name : osal_mutex_destroy */ |
130 | | /* */ |
131 | | /* Description : This function destroys the mutex. */ |
132 | | /* */ |
133 | | /* Inputs : Mutex Handle */ |
134 | | /* */ |
135 | | /* Globals : None */ |
136 | | /* */ |
137 | | /* Processing : This function destroys the mutex refernced by the handle */ |
138 | | /* and frees the memory held by the handle. */ |
139 | | /* */ |
140 | | /* Outputs : Status of mutex destroy */ |
141 | | /* */ |
142 | | /* Returns : On SUCCESS - 0 */ |
143 | | /* On FAILURE - -1 */ |
144 | | /* */ |
145 | | /* Issues : None */ |
146 | | /* */ |
147 | | /* Revision History: */ |
148 | | /* */ |
149 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
150 | | /* 22 03 2006 Ittiam Draft */ |
151 | | /* */ |
152 | | /*****************************************************************************/ |
153 | | |
154 | | WORD32 osal_mutex_destroy(IN void *mutex_handle) |
155 | 177k | { |
156 | 177k | if(0 == mutex_handle) |
157 | 0 | return OSAL_ERROR; |
158 | | |
159 | 177k | { |
160 | 177k | mutex_handle_t *handle = (mutex_handle_t *)mutex_handle; |
161 | 177k | WORD32 status = 0; |
162 | | |
163 | 177k | if(0 == handle->hdl || 0 == handle->hdl->free) |
164 | 0 | return OSAL_ERROR; |
165 | | |
166 | | /* Destroy the mutex */ |
167 | 177k | status = pthread_mutex_destroy(&(handle->mutex_handle)); |
168 | | |
169 | 177k | if(0 != status) |
170 | 0 | return OSAL_ERROR; |
171 | | |
172 | | /* Free the handle */ |
173 | 177k | handle->hdl->free(handle->mmr_handle, handle); |
174 | 177k | return OSAL_SUCCESS; |
175 | 177k | } |
176 | 177k | } |
177 | | |
178 | | /*****************************************************************************/ |
179 | | /* */ |
180 | | /* Function Name : osal_mutex_lock */ |
181 | | /* */ |
182 | | /* Description : This function locks the mutex. */ |
183 | | /* */ |
184 | | /* Inputs : Mutex handle */ |
185 | | /* */ |
186 | | /* Globals : None */ |
187 | | /* */ |
188 | | /* Processing : Calls OS specific mutex lock API. */ |
189 | | /* */ |
190 | | /* Outputs : Status of mutex lock */ |
191 | | /* */ |
192 | | /* Returns : On SUCCESS - 0 */ |
193 | | /* On FAILURE - -1 */ |
194 | | /* */ |
195 | | /* Issues : None */ |
196 | | /* */ |
197 | | /* Revision History: */ |
198 | | /* */ |
199 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
200 | | /* 22 03 2006 Ittiam Draft */ |
201 | | /* */ |
202 | | /*****************************************************************************/ |
203 | | |
204 | | WORD32 osal_mutex_lock(IN void *mutex_handle) |
205 | 13.5M | { |
206 | 13.5M | if(0 == mutex_handle) |
207 | 8.85k | return OSAL_ERROR; |
208 | | |
209 | 13.5M | { |
210 | 13.5M | mutex_handle_t *handle = (mutex_handle_t *)mutex_handle; |
211 | | |
212 | | /* Wait on mutex lock */ |
213 | 13.5M | return pthread_mutex_lock(&(handle->mutex_handle)); |
214 | 13.5M | } |
215 | 13.5M | } |
216 | | |
217 | | /*****************************************************************************/ |
218 | | /* */ |
219 | | /* Function Name : osal_mutex_unlock */ |
220 | | /* */ |
221 | | /* Description : This function unlocks the mutex */ |
222 | | /* */ |
223 | | /* Inputs : Mutex handle */ |
224 | | /* */ |
225 | | /* Globals : None */ |
226 | | /* */ |
227 | | /* Processing : Calls OS specific unlock mutex API. */ |
228 | | /* */ |
229 | | /* Outputs : Status of mutex unlock */ |
230 | | /* */ |
231 | | /* Returns : On SUCCESS - 0 */ |
232 | | /* On FAILURE - -1 */ |
233 | | /* */ |
234 | | /* Issues : None */ |
235 | | /* */ |
236 | | /* Revision History: */ |
237 | | /* */ |
238 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
239 | | /* 22 03 2006 Ittiam Draft */ |
240 | | /* */ |
241 | | /*****************************************************************************/ |
242 | | |
243 | | WORD32 osal_mutex_unlock(IN void *mutex_handle) |
244 | 13.5M | { |
245 | 13.5M | if(0 == mutex_handle) |
246 | 8.85k | return OSAL_ERROR; |
247 | | |
248 | 13.5M | { |
249 | 13.5M | mutex_handle_t *handle = (mutex_handle_t *)mutex_handle; |
250 | | |
251 | | /* Release the lock */ |
252 | 13.5M | if(0 == pthread_mutex_unlock(&(handle->mutex_handle))) |
253 | 13.5M | return OSAL_SUCCESS; |
254 | | |
255 | 18.4E | return OSAL_ERROR; |
256 | 13.5M | } |
257 | 13.5M | } |