Changeset 357b5f5 in mainline for uspace/lib/c/generic/fibril_synch.c
- Timestamp:
- 2011-01-23T20:09:13Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- fdb9982c
- Parents:
- cead2aa (diff), 7e36c8d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/fibril_synch.c
rcead2aa r357b5f5 104 104 fibril_t *f = (fibril_t *) fibril_get_id(); 105 105 106 if (fibril_get_sercount() != 0) 107 core(); 108 106 109 futex_down(&async_futex); 107 110 if (fm->counter-- <= 0) { … … 139 142 static void _fibril_mutex_unlock_unsafe(fibril_mutex_t *fm) 140 143 { 141 assert(fm->counter <= 0);142 144 if (fm->counter++ < 0) { 143 145 link_t *tmp; … … 165 167 void fibril_mutex_unlock(fibril_mutex_t *fm) 166 168 { 169 assert(fibril_mutex_is_locked(fm)); 167 170 futex_down(&async_futex); 168 171 _fibril_mutex_unlock_unsafe(fm); 169 172 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; 170 185 } 171 186 … … 182 197 fibril_t *f = (fibril_t *) fibril_get_id(); 183 198 199 if (fibril_get_sercount() != 0) 200 core(); 201 184 202 futex_down(&async_futex); 185 203 if (frw->writers) { … … 207 225 fibril_t *f = (fibril_t *) fibril_get_id(); 208 226 227 if (fibril_get_sercount() != 0) 228 core(); 229 209 230 futex_down(&async_futex); 210 231 if (frw->writers || frw->readers) { … … 230 251 { 231 252 futex_down(&async_futex); 232 assert(frw->readers || (frw->writers == 1));233 253 if (frw->readers) { 234 254 if (--frw->readers) { … … 296 316 void fibril_rwlock_read_unlock(fibril_rwlock_t *frw) 297 317 { 318 assert(fibril_rwlock_is_read_locked(frw)); 298 319 _fibril_rwlock_common_unlock(frw); 299 320 } … … 301 322 void fibril_rwlock_write_unlock(fibril_rwlock_t *frw) 302 323 { 324 assert(fibril_rwlock_is_write_locked(frw)); 303 325 _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); 304 358 } 305 359 … … 314 368 { 315 369 awaiter_t wdata; 370 371 assert(fibril_mutex_is_locked(fm)); 316 372 317 373 if (timeout < 0)
Note:
See TracChangeset
for help on using the changeset viewer.