Mercurial > sdl-ios-xcode
comparison src/thread/irix/SDL_syssem.c @ 1668:4da1ee79c9af SDL-1.3
more tweaking indent options
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 29 May 2006 04:04:35 +0000 |
parents | 782fd950bd46 |
children |
comparison
equal
deleted
inserted
replaced
1667:1fddae038bc8 | 1668:4da1ee79c9af |
---|---|
62 {0, 1, (IPC_NOWAIT | SEM_UNDO)} /* Increment semaphore */ | 62 {0, 1, (IPC_NOWAIT | SEM_UNDO)} /* Increment semaphore */ |
63 }; | 63 }; |
64 | 64 |
65 /* Create a blockable semaphore */ | 65 /* Create a blockable semaphore */ |
66 SDL_sem * | 66 SDL_sem * |
67 SDL_CreateSemaphore (Uint32 initial_value) | 67 SDL_CreateSemaphore(Uint32 initial_value) |
68 { | 68 { |
69 extern int _creating_thread_lock; /* SDL_threads.c */ | 69 extern int _creating_thread_lock; /* SDL_threads.c */ |
70 SDL_sem *sem; | 70 SDL_sem *sem; |
71 union semun init; | 71 union semun init; |
72 | 72 |
73 sem = (SDL_sem *) SDL_malloc (sizeof (*sem)); | 73 sem = (SDL_sem *) SDL_malloc(sizeof(*sem)); |
74 if (sem == NULL) { | 74 if (sem == NULL) { |
75 SDL_OutOfMemory (); | 75 SDL_OutOfMemory(); |
76 return (NULL); | 76 return (NULL); |
77 } | 77 } |
78 sem->id = semget (IPC_PRIVATE, 1, (0600 | IPC_CREAT)); | 78 sem->id = semget(IPC_PRIVATE, 1, (0600 | IPC_CREAT)); |
79 if (sem->id < 0) { | 79 if (sem->id < 0) { |
80 SDL_SetError ("Couldn't create semaphore"); | 80 SDL_SetError("Couldn't create semaphore"); |
81 SDL_free (sem); | 81 SDL_free(sem); |
82 return (NULL); | 82 return (NULL); |
83 } | 83 } |
84 init.val = initial_value; /* Initialize semaphore */ | 84 init.val = initial_value; /* Initialize semaphore */ |
85 semctl (sem->id, 0, SETVAL, init); | 85 semctl(sem->id, 0, SETVAL, init); |
86 return (sem); | 86 return (sem); |
87 } | 87 } |
88 | 88 |
89 void | 89 void |
90 SDL_DestroySemaphore (SDL_sem * sem) | 90 SDL_DestroySemaphore(SDL_sem * sem) |
91 { | 91 { |
92 if (sem) { | 92 if (sem) { |
93 #ifdef __IRIX__ | 93 #ifdef __IRIX__ |
94 semctl (sem->id, 0, IPC_RMID); | 94 semctl(sem->id, 0, IPC_RMID); |
95 #else | 95 #else |
96 union semun dummy; | 96 union semun dummy; |
97 dummy.val = 0; | 97 dummy.val = 0; |
98 semctl (sem->id, 0, IPC_RMID, dummy); | 98 semctl(sem->id, 0, IPC_RMID, dummy); |
99 #endif | 99 #endif |
100 SDL_free (sem); | 100 SDL_free(sem); |
101 } | 101 } |
102 } | 102 } |
103 | 103 |
104 int | 104 int |
105 SDL_SemTryWait (SDL_sem * sem) | 105 SDL_SemTryWait(SDL_sem * sem) |
106 { | 106 { |
107 int retval; | 107 int retval; |
108 | 108 |
109 if (!sem) { | 109 if (!sem) { |
110 SDL_SetError ("Passed a NULL semaphore"); | 110 SDL_SetError("Passed a NULL semaphore"); |
111 return -1; | 111 return -1; |
112 } | 112 } |
113 | 113 |
114 retval = 0; | 114 retval = 0; |
115 tryagain: | 115 tryagain: |
116 if (semop (sem->id, op_trywait, 1) < 0) { | 116 if (semop(sem->id, op_trywait, 1) < 0) { |
117 if (errno == EINTR) { | 117 if (errno == EINTR) { |
118 goto tryagain; | 118 goto tryagain; |
119 } | 119 } |
120 retval = SDL_MUTEX_TIMEDOUT; | 120 retval = SDL_MUTEX_TIMEDOUT; |
121 } | 121 } |
122 return retval; | 122 return retval; |
123 } | 123 } |
124 | 124 |
125 int | 125 int |
126 SDL_SemWait (SDL_sem * sem) | 126 SDL_SemWait(SDL_sem * sem) |
127 { | 127 { |
128 int retval; | 128 int retval; |
129 | 129 |
130 if (!sem) { | 130 if (!sem) { |
131 SDL_SetError ("Passed a NULL semaphore"); | 131 SDL_SetError("Passed a NULL semaphore"); |
132 return -1; | 132 return -1; |
133 } | 133 } |
134 | 134 |
135 retval = 0; | 135 retval = 0; |
136 tryagain: | 136 tryagain: |
137 if (semop (sem->id, op_wait, 1) < 0) { | 137 if (semop(sem->id, op_wait, 1) < 0) { |
138 if (errno == EINTR) { | 138 if (errno == EINTR) { |
139 goto tryagain; | 139 goto tryagain; |
140 } | 140 } |
141 SDL_SetError ("Semaphore operation error"); | 141 SDL_SetError("Semaphore operation error"); |
142 retval = -1; | 142 retval = -1; |
143 } | 143 } |
144 return retval; | 144 return retval; |
145 } | 145 } |
146 | 146 |
147 int | 147 int |
148 SDL_SemWaitTimeout (SDL_sem * sem, Uint32 timeout) | 148 SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) |
149 { | 149 { |
150 int retval; | 150 int retval; |
151 | 151 |
152 if (!sem) { | 152 if (!sem) { |
153 SDL_SetError ("Passed a NULL semaphore"); | 153 SDL_SetError("Passed a NULL semaphore"); |
154 return -1; | 154 return -1; |
155 } | 155 } |
156 | 156 |
157 /* Try the easy cases first */ | 157 /* Try the easy cases first */ |
158 if (timeout == 0) { | 158 if (timeout == 0) { |
159 return SDL_SemTryWait (sem); | 159 return SDL_SemTryWait(sem); |
160 } | 160 } |
161 if (timeout == SDL_MUTEX_MAXWAIT) { | 161 if (timeout == SDL_MUTEX_MAXWAIT) { |
162 return SDL_SemWait (sem); | 162 return SDL_SemWait(sem); |
163 } | 163 } |
164 | 164 |
165 /* Ack! We have to busy wait... */ | 165 /* Ack! We have to busy wait... */ |
166 timeout += SDL_GetTicks (); | 166 timeout += SDL_GetTicks(); |
167 do { | 167 do { |
168 retval = SDL_SemTryWait (sem); | 168 retval = SDL_SemTryWait(sem); |
169 if (retval == 0) { | 169 if (retval == 0) { |
170 break; | 170 break; |
171 } | 171 } |
172 SDL_Delay (1); | 172 SDL_Delay(1); |
173 } | 173 } |
174 while (SDL_GetTicks () < timeout); | 174 while (SDL_GetTicks() < timeout); |
175 | 175 |
176 return retval; | 176 return retval; |
177 } | 177 } |
178 | 178 |
179 Uint32 | 179 Uint32 |
180 SDL_SemValue (SDL_sem * sem) | 180 SDL_SemValue(SDL_sem * sem) |
181 { | 181 { |
182 int semval; | 182 int semval; |
183 Uint32 value; | 183 Uint32 value; |
184 | 184 |
185 value = 0; | 185 value = 0; |
186 if (sem) { | 186 if (sem) { |
187 tryagain: | 187 tryagain: |
188 #ifdef __IRIX__ | 188 #ifdef __IRIX__ |
189 semval = semctl (sem->id, 0, GETVAL); | 189 semval = semctl(sem->id, 0, GETVAL); |
190 #else | 190 #else |
191 { | 191 { |
192 union semun arg; | 192 union semun arg; |
193 arg.val = 0; | 193 arg.val = 0; |
194 semval = semctl (sem->id, 0, GETVAL, arg); | 194 semval = semctl(sem->id, 0, GETVAL, arg); |
195 } | 195 } |
196 #endif | 196 #endif |
197 if (semval < 0) { | 197 if (semval < 0) { |
198 if (errno == EINTR) { | 198 if (errno == EINTR) { |
199 goto tryagain; | 199 goto tryagain; |
204 } | 204 } |
205 return value; | 205 return value; |
206 } | 206 } |
207 | 207 |
208 int | 208 int |
209 SDL_SemPost (SDL_sem * sem) | 209 SDL_SemPost(SDL_sem * sem) |
210 { | 210 { |
211 int retval; | 211 int retval; |
212 | 212 |
213 if (!sem) { | 213 if (!sem) { |
214 SDL_SetError ("Passed a NULL semaphore"); | 214 SDL_SetError("Passed a NULL semaphore"); |
215 return -1; | 215 return -1; |
216 } | 216 } |
217 | 217 |
218 retval = 0; | 218 retval = 0; |
219 tryagain: | 219 tryagain: |
220 if (semop (sem->id, op_post, 1) < 0) { | 220 if (semop(sem->id, op_post, 1) < 0) { |
221 if (errno == EINTR) { | 221 if (errno == EINTR) { |
222 goto tryagain; | 222 goto tryagain; |
223 } | 223 } |
224 SDL_SetError ("Semaphore operation error"); | 224 SDL_SetError("Semaphore operation error"); |
225 retval = -1; | 225 retval = -1; |
226 } | 226 } |
227 return retval; | 227 return retval; |
228 } | 228 } |
229 | 229 |