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