Mercurial > sdl-ios-xcode
comparison src/thread/win32/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 |
---|---|
43 }; | 43 }; |
44 | 44 |
45 | 45 |
46 /* Create a semaphore */ | 46 /* Create a semaphore */ |
47 SDL_sem * | 47 SDL_sem * |
48 SDL_CreateSemaphore (Uint32 initial_value) | 48 SDL_CreateSemaphore(Uint32 initial_value) |
49 { | 49 { |
50 SDL_sem *sem; | 50 SDL_sem *sem; |
51 | 51 |
52 /* Allocate sem memory */ | 52 /* Allocate sem memory */ |
53 sem = (SDL_sem *) SDL_malloc (sizeof (*sem)); | 53 sem = (SDL_sem *) SDL_malloc(sizeof(*sem)); |
54 if (sem) { | 54 if (sem) { |
55 /* Create the semaphore, with max value 32K */ | 55 /* Create the semaphore, with max value 32K */ |
56 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) | 56 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) |
57 sem->id = CreateSemaphoreCE (NULL, initial_value, 32 * 1024, NULL); | 57 sem->id = CreateSemaphoreCE(NULL, initial_value, 32 * 1024, NULL); |
58 #else | 58 #else |
59 sem->id = CreateSemaphore (NULL, initial_value, 32 * 1024, NULL); | 59 sem->id = CreateSemaphore(NULL, initial_value, 32 * 1024, NULL); |
60 #endif | 60 #endif |
61 sem->count = initial_value; | 61 sem->count = initial_value; |
62 if (!sem->id) { | 62 if (!sem->id) { |
63 SDL_SetError ("Couldn't create semaphore"); | 63 SDL_SetError("Couldn't create semaphore"); |
64 SDL_free (sem); | 64 SDL_free(sem); |
65 sem = NULL; | 65 sem = NULL; |
66 } | 66 } |
67 } else { | 67 } else { |
68 SDL_OutOfMemory (); | 68 SDL_OutOfMemory(); |
69 } | 69 } |
70 return (sem); | 70 return (sem); |
71 } | 71 } |
72 | 72 |
73 /* Free the semaphore */ | 73 /* Free the semaphore */ |
74 void | 74 void |
75 SDL_DestroySemaphore (SDL_sem * sem) | 75 SDL_DestroySemaphore(SDL_sem * sem) |
76 { | 76 { |
77 if (sem) { | 77 if (sem) { |
78 if (sem->id) { | 78 if (sem->id) { |
79 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) | 79 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) |
80 CloseSynchHandle (sem->id); | 80 CloseSynchHandle(sem->id); |
81 #else | 81 #else |
82 CloseHandle (sem->id); | 82 CloseHandle(sem->id); |
83 #endif | 83 #endif |
84 sem->id = 0; | 84 sem->id = 0; |
85 } | 85 } |
86 SDL_free (sem); | 86 SDL_free(sem); |
87 } | 87 } |
88 } | 88 } |
89 | 89 |
90 int | 90 int |
91 SDL_SemWaitTimeout (SDL_sem * sem, Uint32 timeout) | 91 SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) |
92 { | 92 { |
93 int retval; | 93 int retval; |
94 DWORD dwMilliseconds; | 94 DWORD dwMilliseconds; |
95 | 95 |
96 if (!sem) { | 96 if (!sem) { |
97 SDL_SetError ("Passed a NULL sem"); | 97 SDL_SetError("Passed a NULL sem"); |
98 return -1; | 98 return -1; |
99 } | 99 } |
100 | 100 |
101 if (timeout == SDL_MUTEX_MAXWAIT) { | 101 if (timeout == SDL_MUTEX_MAXWAIT) { |
102 dwMilliseconds = INFINITE; | 102 dwMilliseconds = INFINITE; |
103 } else { | 103 } else { |
104 dwMilliseconds = (DWORD) timeout; | 104 dwMilliseconds = (DWORD) timeout; |
105 } | 105 } |
106 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) | 106 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) |
107 switch (WaitForSemaphoreCE (sem->id, dwMilliseconds)) { | 107 switch (WaitForSemaphoreCE(sem->id, dwMilliseconds)) { |
108 #else | 108 #else |
109 switch (WaitForSingleObject (sem->id, dwMilliseconds)) { | 109 switch (WaitForSingleObject(sem->id, dwMilliseconds)) { |
110 #endif | 110 #endif |
111 case WAIT_OBJECT_0: | 111 case WAIT_OBJECT_0: |
112 --sem->count; | 112 --sem->count; |
113 retval = 0; | 113 retval = 0; |
114 break; | 114 break; |
115 case WAIT_TIMEOUT: | 115 case WAIT_TIMEOUT: |
116 retval = SDL_MUTEX_TIMEDOUT; | 116 retval = SDL_MUTEX_TIMEDOUT; |
117 break; | 117 break; |
118 default: | 118 default: |
119 SDL_SetError ("WaitForSingleObject() failed"); | 119 SDL_SetError("WaitForSingleObject() failed"); |
120 retval = -1; | 120 retval = -1; |
121 break; | 121 break; |
122 } | 122 } |
123 return retval; | 123 return retval; |
124 } | 124 } |
125 | 125 |
126 int | 126 int |
127 SDL_SemTryWait (SDL_sem * sem) | 127 SDL_SemTryWait(SDL_sem * sem) |
128 { | 128 { |
129 return SDL_SemWaitTimeout (sem, 0); | 129 return SDL_SemWaitTimeout(sem, 0); |
130 } | 130 } |
131 | 131 |
132 int | 132 int |
133 SDL_SemWait (SDL_sem * sem) | 133 SDL_SemWait(SDL_sem * sem) |
134 { | 134 { |
135 return SDL_SemWaitTimeout (sem, SDL_MUTEX_MAXWAIT); | 135 return SDL_SemWaitTimeout(sem, SDL_MUTEX_MAXWAIT); |
136 } | 136 } |
137 | 137 |
138 /* Returns the current count of the semaphore */ | 138 /* Returns the current count of the semaphore */ |
139 Uint32 | 139 Uint32 |
140 SDL_SemValue (SDL_sem * sem) | 140 SDL_SemValue(SDL_sem * sem) |
141 { | 141 { |
142 if (!sem) { | 142 if (!sem) { |
143 SDL_SetError ("Passed a NULL sem"); | 143 SDL_SetError("Passed a NULL sem"); |
144 return 0; | 144 return 0; |
145 } | 145 } |
146 return sem->count; | 146 return sem->count; |
147 } | 147 } |
148 | 148 |
149 int | 149 int |
150 SDL_SemPost (SDL_sem * sem) | 150 SDL_SemPost(SDL_sem * sem) |
151 { | 151 { |
152 if (!sem) { | 152 if (!sem) { |
153 SDL_SetError ("Passed a NULL sem"); | 153 SDL_SetError("Passed a NULL sem"); |
154 return -1; | 154 return -1; |
155 } | 155 } |
156 /* Increase the counter in the first place, because | 156 /* Increase the counter in the first place, because |
157 * after a successful release the semaphore may | 157 * after a successful release the semaphore may |
158 * immediately get destroyed by another thread which | 158 * immediately get destroyed by another thread which |
159 * is waiting for this semaphore. | 159 * is waiting for this semaphore. |
160 */ | 160 */ |
161 ++sem->count; | 161 ++sem->count; |
162 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) | 162 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300) |
163 if (ReleaseSemaphoreCE (sem->id, 1, NULL) == FALSE) { | 163 if (ReleaseSemaphoreCE(sem->id, 1, NULL) == FALSE) { |
164 #else | 164 #else |
165 if (ReleaseSemaphore (sem->id, 1, NULL) == FALSE) { | 165 if (ReleaseSemaphore(sem->id, 1, NULL) == FALSE) { |
166 #endif | 166 #endif |
167 --sem->count; /* restore */ | 167 --sem->count; /* restore */ |
168 SDL_SetError ("ReleaseSemaphore() failed"); | 168 SDL_SetError("ReleaseSemaphore() failed"); |
169 return -1; | 169 return -1; |
170 } | 170 } |
171 return 0; | 171 return 0; |
172 } | 172 } |
173 | 173 |