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

Diff for /pegasus/src/Pegasus/Common/Mutex.h between version 1.4.2.4 and 1.4.2.5

version 1.4.2.4, 2006/07/28 23:52:11 version 1.4.2.5, 2006/07/30 22:51:02
Line 54 
Line 54 
 typedef pthread_mutex_t MutexType; typedef pthread_mutex_t MutexType;
 struct MutexRep struct MutexRep
 { {
     pthread_mutex_t mutex;      MutexType mutex;
     pthread_mutexattr_t attr;  
 }; };
 inline void mutex_lock(MutexType* mutex) { pthread_mutex_lock(mutex); } inline void mutex_lock(MutexType* mutex) { pthread_mutex_lock(mutex); }
 inline void mutex_unlock(MutexType* mutex) { pthread_mutex_unlock(mutex); } inline void mutex_unlock(MutexType* mutex) { pthread_mutex_unlock(mutex); }
   inline void mutex_destroy(MutexType* mutex) { pthread_mutex_destroy(mutex); }
 # define PEGASUS_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER # define PEGASUS_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
 #endif #endif
  
Line 86 
Line 86 
  
     Mutex();     Mutex();
  
     ~Mutex();      ~Mutex()
       {
           mutex_destroy(&_rep.mutex);
       }
  
     void lock();      void lock()
       {
           mutex_lock(&_rep.mutex);
       }
  
     void try_lock();     void try_lock();
  
     void timed_lock(Uint32 milliseconds);     void timed_lock(Uint32 milliseconds);
  
     void unlock();      void unlock()
       {
           mutex_unlock(&_rep.mutex);
       }
  
 private: private:
     Mutex(const Mutex&);     Mutex(const Mutex&);
Line 117 
Line 126 
 { {
 public: public:
  
     AutoMutex(Mutex& mutex, Boolean autoLock = true) :      AutoMutex(Mutex& mutex) : _mutex(mutex)
         _mutex(mutex), _locked(autoLock)  
     {     {
         if (autoLock)  
             _mutex.lock();             _mutex.lock();
     }     }
  
     ~AutoMutex()     ~AutoMutex()
     {     {
         try          _mutex.unlock();
         {  
             if (_locked)  
                 unlock();  
         }  
         catch (...)  
         {  
             // Do not propagate exception from destructor  
         }  
     }     }
  
     void lock()     void lock()
     {     {
         if (_locked)  
             throw AlreadyLocked(ThreadType());  
   
         _mutex.lock();         _mutex.lock();
         _locked = true;  
     }     }
  
     void unlock()     void unlock()
     {     {
         if (!_locked)  
             throw Permission(ThreadType());  
   
         _mutex.unlock();         _mutex.unlock();
         _locked = false;  
     }  
   
     Boolean isLocked() const  
     {  
         return _locked;  
     }     }
  
 private: private:
     AutoMutex(); // Unimplemented      AutoMutex();
     AutoMutex(const AutoMutex& x); // Unimplemented      AutoMutex(const AutoMutex& x);
     AutoMutex& operator=(const AutoMutex& x); // Unimplemented      AutoMutex& operator=(const AutoMutex& x);
  
     Mutex& _mutex;     Mutex& _mutex;
     Boolean _locked;  
 }; };
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.4.2.4  
changed lines
  Added in v.1.4.2.5

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2