Ignore:
Timestamp:
Apr 23, 2021, 8:51:43 PM (5 years ago)
Author:
Frederik Heber <frederik.heber@…>
Branches:
Candidate_v1.7.0, stable
Children:
77c4a0
Parents:
f01bb3
git-author:
Frederik Heber <frederik.heber@…> (11/24/20 00:00:44)
git-committer:
Frederik Heber <frederik.heber@…> (04/23/21 20:51:43)
Message:

FIX: CheckLock in AtomicInstance test did not check locking properly.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ThirdParty/CodePatterns/src/Patterns/unittests/AtomicInstanceUnitTest.cpp

    rf01bb3 r2b88eb  
    8686void AtomicInstanceTest::tearDown(){}
    8787
    88 static bool checkLock(boost::mutex &_mutex)
     88static bool isLockable(boost::mutex &_mutex)
    8989{
    90   boost::mutex::scoped_lock lock(_mutex, boost::try_to_lock);
    91   return lock;
     90  bool is_locked = _mutex.try_lock();
     91  if (is_locked)
     92    _mutex.unlock();
     93  return is_locked;
    9294}
    9395
     
    9799  AtomicInstanceStub2 *ptr2_1 = new AtomicInstanceStub2();
    98100  {
    99     CPPUNIT_ASSERT( checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     101    CPPUNIT_ASSERT( isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    100102    AtomicInstance<AtomicInstanceStub1> atomic_ptr1_1(ptr1_1);
    101103    CPPUNIT_ASSERT_EQUAL( ptr1_1, &(*atomic_ptr1_1) );
    102     CPPUNIT_ASSERT( !checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     104    CPPUNIT_ASSERT( !isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    103105
    104106    // will NULL no deadlock occurs
    105107    {
    106       CPPUNIT_ASSERT( !checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     108      CPPUNIT_ASSERT( !isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    107109      AtomicInstance<AtomicInstanceStub1> atomic_ptr1_NULL(NULL);
    108       CPPUNIT_ASSERT( !checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     110      CPPUNIT_ASSERT( !isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    109111    }
    110112
    111     CPPUNIT_ASSERT( checkLock(AtomicInstance<AtomicInstanceStub2>::atomicLock) );
     113    CPPUNIT_ASSERT( isLockable(AtomicInstance<AtomicInstanceStub2>::atomicLock) );
    112114    const AtomicInstance<AtomicInstanceStub2> atomic_ptr2_1(ptr2_1);
    113115    CPPUNIT_ASSERT_EQUAL( const_cast<const AtomicInstanceStub2 *>(ptr2_1), &(*atomic_ptr2_1) );
    114     CPPUNIT_ASSERT( !checkLock(AtomicInstance<AtomicInstanceStub2>::atomicLock) );
     116    CPPUNIT_ASSERT( !isLockable(AtomicInstance<AtomicInstanceStub2>::atomicLock) );
    115117
    116118    // move is ok
    117     CPPUNIT_ASSERT( !checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     119    CPPUNIT_ASSERT( !isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    118120    AtomicInstance<AtomicInstanceStub1> atomic_ptr1_2(atomic_ptr1_1);
    119121    CPPUNIT_ASSERT( atomic_ptr1_1.content == (AtomicInstanceStub1 *)NULL);
    120122    CPPUNIT_ASSERT( atomic_ptr1_2.content != (AtomicInstanceStub1 *)NULL);
    121     CPPUNIT_ASSERT( !checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     123    CPPUNIT_ASSERT( !isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    122124
    123125    // this would cause deadlock
    124126//    AtomicInstance<AtomicInstanceStub1> atomic_ptr1_3(ptr1_1);
    125127  }
    126   CPPUNIT_ASSERT( checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    127   CPPUNIT_ASSERT( checkLock(AtomicInstance<AtomicInstanceStub2>::atomicLock) );
     128  CPPUNIT_ASSERT( isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     129  CPPUNIT_ASSERT( isLockable(AtomicInstance<AtomicInstanceStub2>::atomicLock) );
    128130  delete ptr1_1;
    129131  delete ptr2_1;
     
    135137  {
    136138    // this does not lock
    137     CPPUNIT_ASSERT( checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     139    CPPUNIT_ASSERT( isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    138140    AtomicInstance<AtomicInstanceStub1> atomic_ptr1_NULL(NULL);
    139141    CPPUNIT_ASSERT( atomic_ptr1_NULL.content == (AtomicInstanceStub1 *)NULL );
    140     CPPUNIT_ASSERT( checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     142    CPPUNIT_ASSERT( isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    141143
    142144    // this will lock
    143145    AtomicInstance<AtomicInstanceStub1> atomic_ptr1_1(ptr1_1);
    144146    CPPUNIT_ASSERT( atomic_ptr1_1.content != (AtomicInstanceStub1 *)NULL );
    145     CPPUNIT_ASSERT( !checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     147    CPPUNIT_ASSERT( !isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    146148
    147149    // now assign. Content has moved and should still be locked
    148150    atomic_ptr1_NULL = atomic_ptr1_1;
    149     CPPUNIT_ASSERT( !checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     151    CPPUNIT_ASSERT( !isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    150152    CPPUNIT_ASSERT( atomic_ptr1_NULL.content != (AtomicInstanceStub1 *)NULL );
    151153    CPPUNIT_ASSERT( atomic_ptr1_1.content == (AtomicInstanceStub1 *)NULL );
    152154  }
    153   CPPUNIT_ASSERT( checkLock(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
     155  CPPUNIT_ASSERT( isLockable(AtomicInstance<AtomicInstanceStub1>::atomicLock) );
    154156
    155157  delete ptr1_1;
Note: See TracChangeset for help on using the changeset viewer.