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