Mercurial > sdl-ios-xcode
comparison src/thread/pthread/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 |
---|---|
39 sem_t sem; | 39 sem_t sem; |
40 }; | 40 }; |
41 | 41 |
42 /* Create a semaphore, initialized with value */ | 42 /* Create a semaphore, initialized with value */ |
43 SDL_sem * | 43 SDL_sem * |
44 SDL_CreateSemaphore (Uint32 initial_value) | 44 SDL_CreateSemaphore(Uint32 initial_value) |
45 { | 45 { |
46 SDL_sem *sem = (SDL_sem *) SDL_malloc (sizeof (SDL_sem)); | 46 SDL_sem *sem = (SDL_sem *) SDL_malloc(sizeof(SDL_sem)); |
47 if (sem) { | 47 if (sem) { |
48 if (sem_init (&sem->sem, 0, initial_value) < 0) { | 48 if (sem_init(&sem->sem, 0, initial_value) < 0) { |
49 SDL_SetError ("sem_init() failed"); | 49 SDL_SetError("sem_init() failed"); |
50 SDL_free (sem); | 50 SDL_free(sem); |
51 sem = NULL; | 51 sem = NULL; |
52 } | 52 } |
53 } else { | 53 } else { |
54 SDL_OutOfMemory (); | 54 SDL_OutOfMemory(); |
55 } | 55 } |
56 return sem; | 56 return sem; |
57 } | 57 } |
58 | 58 |
59 void | 59 void |
60 SDL_DestroySemaphore (SDL_sem * sem) | 60 SDL_DestroySemaphore(SDL_sem * sem) |
61 { | 61 { |
62 if (sem) { | 62 if (sem) { |
63 sem_destroy (&sem->sem); | 63 sem_destroy(&sem->sem); |
64 SDL_free (sem); | 64 SDL_free(sem); |
65 } | 65 } |
66 } | 66 } |
67 | 67 |
68 int | 68 int |
69 SDL_SemTryWait (SDL_sem * sem) | 69 SDL_SemTryWait(SDL_sem * sem) |
70 { | 70 { |
71 int retval; | 71 int retval; |
72 | 72 |
73 if (!sem) { | 73 if (!sem) { |
74 SDL_SetError ("Passed a NULL semaphore"); | 74 SDL_SetError("Passed a NULL semaphore"); |
75 return -1; | 75 return -1; |
76 } | 76 } |
77 retval = SDL_MUTEX_TIMEDOUT; | 77 retval = SDL_MUTEX_TIMEDOUT; |
78 if (sem_trywait (&sem->sem) == 0) { | 78 if (sem_trywait(&sem->sem) == 0) { |
79 retval = 0; | 79 retval = 0; |
80 } | 80 } |
81 return retval; | 81 return retval; |
82 } | 82 } |
83 | 83 |
84 int | 84 int |
85 SDL_SemWait (SDL_sem * sem) | 85 SDL_SemWait(SDL_sem * sem) |
86 { | 86 { |
87 int retval; | 87 int retval; |
88 | 88 |
89 if (!sem) { | 89 if (!sem) { |
90 SDL_SetError ("Passed a NULL semaphore"); | 90 SDL_SetError("Passed a NULL semaphore"); |
91 return -1; | 91 return -1; |
92 } | 92 } |
93 | 93 |
94 retval = sem_wait (&sem->sem); | 94 retval = sem_wait(&sem->sem); |
95 if (retval < 0) { | 95 if (retval < 0) { |
96 SDL_SetError ("sem_wait() failed"); | 96 SDL_SetError("sem_wait() failed"); |
97 } | 97 } |
98 return retval; | 98 return retval; |
99 } | 99 } |
100 | 100 |
101 int | 101 int |
102 SDL_SemWaitTimeout (SDL_sem * sem, Uint32 timeout) | 102 SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) |
103 { | 103 { |
104 int retval; | 104 int retval; |
105 | 105 |
106 if (!sem) { | 106 if (!sem) { |
107 SDL_SetError ("Passed a NULL semaphore"); | 107 SDL_SetError("Passed a NULL semaphore"); |
108 return -1; | 108 return -1; |
109 } | 109 } |
110 | 110 |
111 /* Try the easy cases first */ | 111 /* Try the easy cases first */ |
112 if (timeout == 0) { | 112 if (timeout == 0) { |
113 return SDL_SemTryWait (sem); | 113 return SDL_SemTryWait(sem); |
114 } | 114 } |
115 if (timeout == SDL_MUTEX_MAXWAIT) { | 115 if (timeout == SDL_MUTEX_MAXWAIT) { |
116 return SDL_SemWait (sem); | 116 return SDL_SemWait(sem); |
117 } | 117 } |
118 | 118 |
119 /* Ack! We have to busy wait... */ | 119 /* Ack! We have to busy wait... */ |
120 /* FIXME: Use sem_timedwait()? */ | 120 /* FIXME: Use sem_timedwait()? */ |
121 timeout += SDL_GetTicks (); | 121 timeout += SDL_GetTicks(); |
122 do { | 122 do { |
123 retval = SDL_SemTryWait (sem); | 123 retval = SDL_SemTryWait(sem); |
124 if (retval == 0) { | 124 if (retval == 0) { |
125 break; | 125 break; |
126 } | 126 } |
127 SDL_Delay (1); | 127 SDL_Delay(1); |
128 } | 128 } |
129 while (SDL_GetTicks () < timeout); | 129 while (SDL_GetTicks() < timeout); |
130 | 130 |
131 return retval; | 131 return retval; |
132 } | 132 } |
133 | 133 |
134 Uint32 | 134 Uint32 |
135 SDL_SemValue (SDL_sem * sem) | 135 SDL_SemValue(SDL_sem * sem) |
136 { | 136 { |
137 int ret = 0; | 137 int ret = 0; |
138 if (sem) { | 138 if (sem) { |
139 sem_getvalue (&sem->sem, &ret); | 139 sem_getvalue(&sem->sem, &ret); |
140 if (ret < 0) { | 140 if (ret < 0) { |
141 ret = 0; | 141 ret = 0; |
142 } | 142 } |
143 } | 143 } |
144 return (Uint32) ret; | 144 return (Uint32) ret; |
145 } | 145 } |
146 | 146 |
147 int | 147 int |
148 SDL_SemPost (SDL_sem * sem) | 148 SDL_SemPost(SDL_sem * sem) |
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 retval = sem_post (&sem->sem); | 157 retval = sem_post(&sem->sem); |
158 if (retval < 0) { | 158 if (retval < 0) { |
159 SDL_SetError ("sem_post() failed"); | 159 SDL_SetError("sem_post() failed"); |
160 } | 160 } |
161 return retval; | 161 return retval; |
162 } | 162 } |
163 | 163 |
164 #endif /* __MACOSX__ */ | 164 #endif /* __MACOSX__ */ |