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