Changeset 3bc5984 in rtems-libbsd for rtemsbsd/src/rtems-bsd-rwlock.c
- Timestamp:
- 05/30/12 18:42:49 (11 years ago)
- Branches:
- 4.11, 5, 5-freebsd-12, 6-freebsd-12, freebsd-9.3, master
- Children:
- 569ce65
- Parents:
- 8aecdc0
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rtemsbsd/src/rtems-bsd-rwlock.c
r8aecdc0 r3bc5984 40 40 /* Necessary to obtain some internal functions */ 41 41 #define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 42 #include <pthread.h> 43 #include <rtems/posix/rwlock.h> 42 44 43 45 #include <freebsd/machine/rtems-bsd-config.h> … … 49 51 #include <freebsd/sys/lock.h> 50 52 #include <freebsd/sys/rwlock.h> 51 #include <pthread.h>52 53 53 54 #ifndef INVARIANTS … … 192 193 } 193 194 195 /* XXX add pthread_rwlock_is_wlocked_np( id, &wlocked ) 196 * XXX returns 0 or -1 w/error 197 * XXX wlocked = 1 if write locked 198 * XXX 199 /* XXX add pthread_rwlock_is_rlocked_np( id, &wlocked ) 200 * XXX similar behavior 201 * XXX probably want to add "unlocked" state to RTEMS SuperCore rwlock 202 * XXX 203 * XXX Rationale: This violates the API layering BADLY!!!!! 204 * XXX Consider: Adding pthread_np.h to hold np methods like FreeBSD 205 * XXX This would avoid polluting pthread.h 206 */ 194 207 int 195 208 rw_wowned(struct rwlock *rw) 196 209 { 197 Objects_Locations location; 198 Semaphore_Control *sema = _Semaphore_Get(rw->lock_object.lo_id, &location); 199 200 if (location == OBJECTS_LOCAL && !_Attributes_Is_counting_semaphore(sema->attribute_set)) { 201 int owned = sema->Core_control.mutex.holder_id == rtems_task_self(); 202 203 _Thread_Enable_dispatch(); 204 205 return owned; 206 } else { 207 _Thread_Enable_dispatch(); 208 209 BSD_PANIC("unexpected semaphore location or attributes"); 210 } 210 int is_locked_for_write = 0; 211 Objects_Locations location; 212 POSIX_RWLock_Control *the_rwlock; 213 214 the_rwlock = _POSIX_RWLock_Get(&rw->lock_object.lo_id, &location); 215 switch ( location ) { 216 217 case OBJECTS_LOCAL: 218 if (the_rwlock->RWLock.current_state == CORE_RWLOCK_LOCKED_FOR_WRITING) 219 is_locked_for_write = 1; 220 _Thread_Enable_dispatch(); 221 return is_locked_for_write; 222 223 #if defined(RTEMS_MULTIPROCESSING) 224 case OBJECTS_REMOTE: 225 #endif 226 case OBJECTS_ERROR: 227 break; 228 } 229 _Thread_Enable_dispatch(); 230 231 BSD_PANIC("unexpected semaphore location or attributes"); 211 232 } 212 233
Note: See TracChangeset
for help on using the changeset viewer.