From e01f6e0ea56b02c0ac67089ec4a2ccae16506ed7 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 22 Sep 2014 16:49:18 +0200 Subject: CONDVAR(9): Use lock class --- rtemsbsd/rtems/rtems-bsd-condvar.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/rtemsbsd/rtems/rtems-bsd-condvar.c b/rtemsbsd/rtems/rtems-bsd-condvar.c index a657a7d2..e64b4703 100644 --- a/rtemsbsd/rtems/rtems-bsd-condvar.c +++ b/rtemsbsd/rtems/rtems-bsd-condvar.c @@ -7,10 +7,9 @@ */ /* - * Copyright (c) 2009-2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2009-2014 embedded brains GmbH. All rights reserved. * * Dornierstr. 4 - * Obere Lagerstr. 30 * 82178 Puchheim * Germany * @@ -78,12 +77,14 @@ cv_destroy(struct cv *cv) static int _cv_wait_support(struct cv *cv, struct lock_object *lock, int timo, bool relock) { - rtems_status_code sc = RTEMS_SUCCESSFUL; int eno = 0; Objects_Locations location = OBJECTS_ERROR; POSIX_Condition_variables_Control *pcv = _POSIX_Condition_variables_Get(&cv->cv_id, &location); if (location == OBJECTS_LOCAL) { + struct lock_class *class = LOCK_CLASS(lock); + int lock_state; + if (pcv->Mutex != POSIX_CONDITION_VARIABLES_NO_MUTEX && pcv->Mutex != lock->lo_id) { _Thread_Enable_dispatch(); @@ -92,14 +93,7 @@ static int _cv_wait_support(struct cv *cv, struct lock_object *lock, int timo, b return EINVAL; } - sc = rtems_semaphore_release(lock->lo_id); - if (sc != RTEMS_SUCCESSFUL) { - _Thread_Enable_dispatch(); - - BSD_ASSERT(false); - - return EINVAL; - } + lock_state = (*class->lc_unlock)(lock); pcv->Mutex = lock->lo_id; @@ -129,12 +123,7 @@ static int _cv_wait_support(struct cv *cv, struct lock_object *lock, int timo, b } if (relock) { - sc = rtems_semaphore_obtain(lock->lo_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT); - if (sc != RTEMS_SUCCESSFUL) { - BSD_ASSERT(false); - - eno = EINVAL; - } + (*class->lc_lock)(lock, lock_state); } return eno; @@ -187,7 +176,7 @@ int _cv_wait_sig(struct cv *cvp, struct lock_object *lock) { /* XXX */ - _cv_wait_support(cvp, lock, 0, true); + return _cv_wait_support(cvp, lock, 0, true); } int -- cgit v1.2.3