(file) Return to ReadWriteSem.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/ReadWriteSem.cpp between version 1.8.2.1 and 1.10

version 1.8.2.1, 2008/08/20 23:05:50 version 1.10, 2008/08/21 17:51:31
Line 87 
Line 87 
  
 void ReadWriteSem::_unlock(Boolean writeLock, ThreadType caller) void ReadWriteSem::_unlock(Boolean writeLock, ThreadType caller)
 { {
     ThreadType owner;  
   
     if (writeLock)     if (writeLock)
     {     {
         owner = _rwlock.owner;  
         Threads::clear(_rwlock.owner);         Threads::clear(_rwlock.owner);
           PEGASUS_ASSERT(_writers.get() == 1);
           _writers = 0;
     }     }
     if (0 != pthread_rwlock_unlock(&_rwlock.rwlock))      else
     {     {
         _rwlock.owner = owner;          PEGASUS_ASSERT(_readers.get() > 0);
         throw(Permission(Threads::self()));  
     }  
     if (!writeLock && _readers.get() != 0)  
         _readers--;         _readers--;
     else if (_writers.get() != 0)      }
         _writers--;  
       int rc = pthread_rwlock_unlock(&_rwlock.rwlock);
       // All documented error codes represent coding errors.
       PEGASUS_ASSERT(rc == 0);
 } }
  
 int ReadWriteSem::read_count() const int ReadWriteSem::read_count() const
Line 223 
Line 222 
  
 void ReadWriteSem::_unlock(Boolean writeLock, ThreadType caller) void ReadWriteSem::_unlock(Boolean writeLock, ThreadType caller)
 { {
     if (writeLock && _writers.get() != 0)      if (writeLock)
     {     {
           PEGASUS_ASSERT(_writers.get() == 1);
         _writers = 0;         _writers = 0;
         _rwlock._wlock.unlock();         _rwlock._wlock.unlock();
     }     }
     else if (_readers.get() != 0)      else
     {     {
           PEGASUS_ASSERT(_readers.get() > 0);
         _readers--;         _readers--;
         _rwlock._rlock.signal();         _rwlock._rlock.signal();
     }     }


Legend:
Removed from v.1.8.2.1  
changed lines
  Added in v.1.10

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2