From: Dmitry Eremin-Solenikov <[email protected]>

Expand testsuite for rwlocks:
 - always verify _trylock return code
 - always unlock after successful _trylock return
 - try calling _trylock when holding write lock

Signed-off-by: Dmitry Eremin-Solenikov <[email protected]>
---
/** Email created from pull request 19 (lumag:fix-rwlock)
 ** https://github.com/Linaro/odp/pull/19
 ** Patch: https://github.com/Linaro/odp/pull/19.patch
 ** Base sha: 79ba737a404d2833ad33d8f84ed6ce82c9a8c18e
 ** Merge commit sha: 8448157882fac03287253bf54c19284b6d52246e
 **/
 test/common_plat/validation/api/lock/lock.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/test/common_plat/validation/api/lock/lock.c 
b/test/common_plat/validation/api/lock/lock.c
index bd9a2aa..f8a1d8c 100644
--- a/test/common_plat/validation/api/lock/lock.c
+++ b/test/common_plat/validation/api/lock/lock.c
@@ -257,7 +257,7 @@ static int ticketlock_api_tests(void *arg UNUSED)
 
 static void rwlock_api_test(odp_rwlock_t *rw_lock)
 {
-       int rc;
+       int rc = 0;
 
        odp_rwlock_init(rw_lock);
        /* CU_ASSERT(odp_rwlock_is_locked(rw_lock) == 0); */
@@ -265,23 +265,40 @@ static void rwlock_api_test(odp_rwlock_t *rw_lock)
        odp_rwlock_read_lock(rw_lock);
 
        rc = odp_rwlock_read_trylock(rw_lock);
-       CU_ASSERT(rc == 0);
+       CU_ASSERT(rc != 0);
+       if (rc == 1)
+               odp_rwlock_read_unlock(rw_lock);
+
        rc = odp_rwlock_write_trylock(rw_lock);
        CU_ASSERT(rc == 0);
+       if (rc == 1)
+               odp_rwlock_write_unlock(rw_lock);
 
        odp_rwlock_read_unlock(rw_lock);
 
        rc = odp_rwlock_read_trylock(rw_lock);
+       CU_ASSERT(rc != 0);
        if (rc == 1)
                odp_rwlock_read_unlock(rw_lock);
 
        odp_rwlock_write_lock(rw_lock);
        /* CU_ASSERT(odp_rwlock_is_locked(rw_lock) == 1); */
 
+       rc = odp_rwlock_read_trylock(rw_lock);
+       CU_ASSERT(rc == 0);
+       if (rc == 1)
+               odp_rwlock_read_unlock(rw_lock);
+
+       rc = odp_rwlock_write_trylock(rw_lock);
+       CU_ASSERT(rc == 0);
+       if (rc == 1)
+               odp_rwlock_write_unlock(rw_lock);
+
        odp_rwlock_write_unlock(rw_lock);
        /* CU_ASSERT(odp_rwlock_is_locked(rw_lock) == 0); */
 
        rc = odp_rwlock_write_trylock(rw_lock);
+       CU_ASSERT(rc != 0);
        if (rc == 1)
                odp_rwlock_write_unlock(rw_lock);
 }

Reply via email to