cmn_Mutex Class Reference
[Common, basic classes, functions and types]

#include <thread.h>

List of all members.


Detailed Description

Mutex Class implemented in cmn_thread.cpp.

Definition at line 45 of file thread.h.


Public Member Functions

 cmn_Mutex ()
virtual ~cmn_Mutex ()
void Lock ()
void Unlock ()

Private Attributes

 log_CLASSID_m

Constructor & Destructor Documentation

cmn_Mutex::cmn_Mutex (  )  [inline]

Definition at line 49 of file thread.h.

00051     : omni_mutex(), m_tid(0) {
00052 #else
00053     : omni_mutex() {
00054 #endif
00055         // Empty
00056     };

cmn_Mutex::~cmn_Mutex (  )  [virtual]

Definition at line 233 of file cmn_thread.cpp.

References cmn_Num2Str(), ie_MUTEX, and ivd_GETTID.

00233                       {
00234 
00235 #ifdef ivd_THREAD_DEBUG_d
00236 
00237     register ivd_ThreadID_t tid = ivd_GETTID();
00238 
00239     if (m_tid == tid) {
00240         omni_mutex::unlock();
00241 
00242         throw ivd_InternalError(ie_MUTEX,
00243             "Mutex still locked in destructor. tid = " +
00244             cmn_Num2Str((UInt32_t)m_tid));
00245     }
00246 #endif
00247 }

Here is the call graph for this function:


Member Function Documentation

void cmn_Mutex::Lock (  ) 

Definition at line 127 of file cmn_thread.cpp.

References cmn_Num2Str(), ie_MUTEX, ivd_GETTID, log_FUNC_m, and OMNITHREAD_EXEC_m.

Referenced by i_HSM_i::CompleteMigration(), fio_JourFile::DecRefCount(), i_HSM_i::DoMigrationJob(), i_HSM_i::EfficientRecall(), fio_DataBase::EndTransaction(), fio_RelFile::GetFirstNewIDX(), fio_JourMgr::GetJourReadHandle(), fio_JourMgr::GetJourWriteHandle(), fio_TransLstMgr::GetTransObj(), fio_RelFile::GetUnusedVectorIDX(), fio_JourMgr::IncTransNumber(), i_FSC_i::IVDFSRecovery(), hsm_JobElemVecMgr::JobToSequence(), fio_DataBase::LockDB(), hsm_FHmigc::Migrate(), fio_CirFileTrans::ReadFront(), fio_CirFileTrans::ReadNext(), hsm_FHADPRecall::RecallFilesFromList(), fio_DataBase::RegularSuspend(), fio_TransLstMgr::ReleaseTransObj(), fio_RelFile::ReleaseVector(), fio_JourMgr::ReleaseWaiters(), fsc_DataLMgr::Remove(), hsm_TimedList::Run(), hsm_FHmigc::Run(), hsm_FHADPRecall::Run(), hsm_FHmigc::SendToPM(), fio_PermDBinfoMgr::SetJourDate(), fio_PermDBinfoMgr::SetLastSyncPosition(), fio_PermDBinfoMgr::SetLastTransaction(), cmn_LockIDbyOwn< _T, _size >::SetMutex(), rm_ColMediaVol::StartSelectAll(), rm_MinorCol::StartSelectAll(), rm_MajorCol::StartSelectAll(), rm_Partition::StartSelectAll(), rm_MediumVol::StartSelectAll(), rm_Medium::StartSelectAll(), rm_Slot::StartSelectAll(), rm_MediaPool::StartSelectAll(), rm_DiskSubsys::StartSelectAll(), rm_DriveHost::StartSelectAll(), rm_Drive::StartSelectAll(), rm_Library::StartSelectAll(), fio_DataBase::StartTransaction(), hsm_FHdirty::TaskTime(), hsm_DirWaitList::TaskTime(), hsm_FHmigc::TrigMigration(), hsm_FHrelc::TruncationCheck(), fio_DataBase::UnlockDB(), fio_CirFileTrans::WriteBack(), fio_RelFile::WriteRec(), and fio_DataBase::~fio_DataBase().

00127                      {
00128 
00129 #ifdef ivd_THREAD_DEBUG_d
00130 
00131     register ivd_ThreadID_t tid = ivd_GETTID();
00132 
00133     if (tid == m_tid) {
00134         // This thread has already locked the mutex. Just throw an exception.
00135         log_FUNC_m(Lock);
00136         throw ivd_InternalError(ie_MUTEX,
00137             "Double lock on mutex. tid = " +
00138             cmn_Num2Str((UInt32_t)tid));
00139     }
00140 #endif
00141     int retval(0);
00142     OMNITHREAD_EXEC_m(Lock, lock());
00143 //    OMNITHREAD_EXEC_m(Lock, retval = lock());
00144 
00145     if (retval != 0) {
00146         log_FUNC_m(Lock);
00147         register ivd_ThreadID_t tid = ivd_GETTID();
00148         ostringstream sstr;
00149         sstr
00150             << "Possible lock of already locked mutex. "
00151             << "Lock returned error number: " << retval
00152             << " for thread: " << tid;
00153         throw ivd_InternalError(ie_MUTEX, sstr.str());
00154     }
00155 
00156 #ifdef ivd_THREAD_DEBUG_d
00157     if (m_tid != 0) {
00158         // Some thread has already locked the mutex. Just throw an exception.
00159         log_FUNC_m(Lock);
00160         throw ivd_InternalError(ie_MUTEX,
00161             "Double lock on mutex. tid = " +
00162             cmn_Num2Str((UInt32_t)m_tid));
00163     }
00164     // Remember the thread ID that locked mutex.
00165     m_tid = tid;
00166 #endif
00167 }

Here is the call graph for this function:

void cmn_Mutex::Unlock (  ) 

Definition at line 169 of file cmn_thread.cpp.

References cmn_Num2Str(), ie_MUTEX, ivd_GETTID, log_FUNC_m, and OMNITHREAD_EXEC_m.

Referenced by i_HSM_i::CompleteMigration(), fio_JourFile::DecRefCount(), i_HSM_i::DoMigrationJob(), i_HSM_i::EfficientRecall(), rm_ColMediaVol::EndSelectAll(), rm_MinorCol::EndSelectAll(), rm_MajorCol::EndSelectAll(), rm_Partition::EndSelectAll(), rm_MediumVol::EndSelectAll(), rm_Medium::EndSelectAll(), rm_Slot::EndSelectAll(), rm_MediaPool::EndSelectAll(), rm_DiskSubsys::EndSelectAll(), rm_DriveHost::EndSelectAll(), rm_Drive::EndSelectAll(), rm_Library::EndSelectAll(), fio_DataBase::EndTransaction(), fio_RelFile::GetFirstNewIDX(), fio_JourMgr::GetJourReadHandle(), fio_JourMgr::GetJourWriteHandle(), fio_TransLstMgr::GetTransObj(), fio_RelFile::GetUnusedVectorIDX(), fio_JourMgr::IncTransNumber(), i_FSC_i::IVDFSRecovery(), hsm_JobElemVecMgr::JobToSequence(), fio_DataBase::LockDB(), hsm_FHmigc::Migrate(), rm_ColMediaVol::Next(), rm_MinorCol::Next(), rm_MajorCol::Next(), rm_Partition::Next(), rm_MediumVol::Next(), rm_Medium::Next(), rm_Slot::Next(), rm_MediaPool::Next(), rm_DiskSubsys::Next(), rm_DriveHost::Next(), rm_Drive::Next(), rm_Library::Next(), fio_CirFileTrans::ReadFront(), fio_CirFileTrans::ReadNext(), hsm_FHADPRecall::RecallFilesFromList(), fio_DataBase::RegularSuspend(), cmn_LockIDbyOwn< _T, _size >::ReleaseMutex(), fio_TransLstMgr::ReleaseTransObj(), fio_RelFile::ReleaseVector(), fio_JourMgr::ReleaseWaiters(), fsc_DataLMgr::Remove(), hsm_TimedList::Run(), hsm_FHmigc::Run(), hsm_FHADPRecall::Run(), hsm_FHmigc::SendToPM(), fio_PermDBinfoMgr::SetJourDate(), fio_PermDBinfoMgr::SetLastSyncPosition(), fio_PermDBinfoMgr::SetLastTransaction(), rm_ColMediaVol::StartSelectAll(), rm_MinorCol::StartSelectAll(), rm_MajorCol::StartSelectAll(), rm_Partition::StartSelectAll(), rm_MediumVol::StartSelectAll(), rm_Medium::StartSelectAll(), rm_Slot::StartSelectAll(), rm_MediaPool::StartSelectAll(), rm_DiskSubsys::StartSelectAll(), rm_DriveHost::StartSelectAll(), rm_Drive::StartSelectAll(), rm_Library::StartSelectAll(), fio_DataBase::StartTransaction(), hsm_FHdirty::TaskTime(), hsm_DirWaitList::TaskTime(), hsm_FHmigc::TrigMigration(), hsm_FHrelc::Truncate(), hsm_FHrelc::TruncationCheck(), fio_DataBase::UnlockDB(), fio_CirFileTrans::WriteBack(), fio_RelFile::WriteRec(), and fio_DataBase::~fio_DataBase().

00169                        {
00170 
00171 #ifdef ivd_THREAD_DEBUG_d
00172 
00173     register ivd_ThreadID_t tid = ivd_GETTID();
00174 
00175     if (m_tid == tid) {
00176         m_tid = 0;
00177     }
00178     else {
00179         log_FUNC_m(Unlock);
00180         throw ivd_InternalError(ie_MUTEX,
00181             "Unlock done when not holding mutex. tid = " +
00182             cmn_Num2Str((UInt32_t)m_tid));
00183     }
00184 #endif
00185 
00186     int retval(0);
00187     OMNITHREAD_EXEC_m(Unlock, unlock());
00188 //    OMNITHREAD_EXEC_m(Unlock, retval = unlock());
00189     if (retval != 0) {
00190         log_FUNC_m(Unlock);
00191         register ivd_ThreadID_t tid = ivd_GETTID();
00192         ostringstream sstr;
00193         sstr
00194             << "Possible unlock when mutex not held. "
00195             << "Unlock returned error number: " << retval
00196             << " for thread: " << tid;
00197         throw ivd_InternalError(ie_MUTEX, sstr.str());
00198     }
00199 }

Here is the call graph for this function:


Member Data Documentation

Definition at line 74 of file thread.h.


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:05:16 2012 for OPENARCHIVE by  doxygen 1.5.6