Changeset 06e1e95 in mainline for kernel/generic/src/synch
- 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
-
kernel/generic/src/synch/rwlock.c (modified) (1 diff)
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 case ESYNCH_WOULD_BLOCK:210 /*211 * release_spinlock() wasn't called212 */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 between225 * two concurrent readers. (Race is avoided if 'exclusive' is226 * locked at the same time as 'readers_in' is incremented.227 * Same time means both events happen atomically when228 * 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;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.
