Changes in uspace/lib/c/generic/fibril_synch.c [47b7006:9414abc] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/fibril_synch.c
r47b7006 r9414abc 36 36 #include <fibril.h> 37 37 #include <async.h> 38 #include <async_priv.h> 38 39 #include <adt/list.h> 39 40 #include <futex.h> … … 43 44 #include <stacktrace.h> 44 45 #include <stdlib.h> 45 #include "private/async.h"46 46 47 47 static void optimize_execution_power(void) … … 55 55 */ 56 56 if (atomic_get(&threads_in_ipc_wait) > 0) 57 async_poke();57 ipc_poke(); 58 58 } 59 59 … … 104 104 fibril_t *f = (fibril_t *) fibril_get_id(); 105 105 106 if (fibril_get_sercount() != 0)107 abort();108 109 106 futex_down(&async_futex); 110 107 if (fm->counter-- <= 0) { … … 142 139 static void _fibril_mutex_unlock_unsafe(fibril_mutex_t *fm) 143 140 { 141 assert(fm->counter <= 0); 144 142 if (fm->counter++ < 0) { 145 143 link_t *tmp; … … 167 165 void fibril_mutex_unlock(fibril_mutex_t *fm) 168 166 { 169 assert(fibril_mutex_is_locked(fm));170 167 futex_down(&async_futex); 171 168 _fibril_mutex_unlock_unsafe(fm); 172 169 futex_up(&async_futex); 173 }174 175 bool fibril_mutex_is_locked(fibril_mutex_t *fm)176 {177 bool locked = false;178 179 futex_down(&async_futex);180 if (fm->counter <= 0)181 locked = true;182 futex_up(&async_futex);183 184 return locked;185 170 } 186 171 … … 197 182 fibril_t *f = (fibril_t *) fibril_get_id(); 198 183 199 if (fibril_get_sercount() != 0)200 abort();201 202 184 futex_down(&async_futex); 203 185 if (frw->writers) { … … 225 207 fibril_t *f = (fibril_t *) fibril_get_id(); 226 208 227 if (fibril_get_sercount() != 0)228 abort();229 230 209 futex_down(&async_futex); 231 210 if (frw->writers || frw->readers) { … … 251 230 { 252 231 futex_down(&async_futex); 232 assert(frw->readers || (frw->writers == 1)); 253 233 if (frw->readers) { 254 234 if (--frw->readers) { … … 316 296 void fibril_rwlock_read_unlock(fibril_rwlock_t *frw) 317 297 { 318 assert(fibril_rwlock_is_read_locked(frw));319 298 _fibril_rwlock_common_unlock(frw); 320 299 } … … 322 301 void fibril_rwlock_write_unlock(fibril_rwlock_t *frw) 323 302 { 324 assert(fibril_rwlock_is_write_locked(frw));325 303 _fibril_rwlock_common_unlock(frw); 326 }327 328 bool fibril_rwlock_is_read_locked(fibril_rwlock_t *frw)329 {330 bool locked = false;331 332 futex_down(&async_futex);333 if (frw->readers)334 locked = true;335 futex_up(&async_futex);336 337 return locked;338 }339 340 bool fibril_rwlock_is_write_locked(fibril_rwlock_t *frw)341 {342 bool locked = false;343 344 futex_down(&async_futex);345 if (frw->writers) {346 assert(frw->writers == 1);347 locked = true;348 }349 futex_up(&async_futex);350 351 return locked;352 }353 354 bool fibril_rwlock_is_locked(fibril_rwlock_t *frw)355 {356 return fibril_rwlock_is_read_locked(frw) ||357 fibril_rwlock_is_write_locked(frw);358 304 } 359 305 … … 368 314 { 369 315 awaiter_t wdata; 370 371 assert(fibril_mutex_is_locked(fm));372 316 373 317 if (timeout < 0)
Note:
See TracChangeset
for help on using the changeset viewer.