Changeset 06e1e95 in mainline for kernel/generic/src/synch/rwlock.c
- Timestamp:
- 2006-09-14T17:09:21Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1d1f5d3
- Parents:
- e5ecc02
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/synch/rwlock.c
re5ecc02 r06e1e95 207 207 rc = _mutex_lock_timeout(&rwl->exclusive, usec, flags); 208 208 switch (rc) { 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 209 case ESYNCH_WOULD_BLOCK: 210 /* 211 * release_spinlock() wasn't called 212 */ 213 thread_register_call_me(NULL, NULL); 214 spinlock_unlock(&rwl->lock); 215 case ESYNCH_TIMEOUT: 216 case ESYNCH_INTERRUPTED: 217 /* 218 * The sleep timed out. 219 * We just restore interrupt priority level. 220 */ 221 case ESYNCH_OK_BLOCKED: 222 /* 223 * We were woken with rwl->readers_in already incremented. 224 * Note that this arrangement avoids race condition between 225 * two concurrent readers. (Race is avoided if 'exclusive' is 226 * locked at the same time as 'readers_in' is incremented. 227 * Same time means both events happen atomically when 228 * rwl->lock is held.) 229 */ 230 interrupts_restore(ipl); 231 break; 232 case ESYNCH_OK_ATOMIC: 233 panic("_mutex_lock_timeout()==ESYNCH_OK_ATOMIC\n"); 234 break; 235 default: 236 panic("invalid ESYNCH\n"); 237 break; 238 238 } 239 239 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.