Example #1
0
   OSS_INLINE INT32 _dmsStorageData::getMBContext( dmsMBContext ** pContext,
                                                   UINT16 mbID, UINT32 clLID,
                                                   INT32 lockType )
   {
      if ( mbID >= DMS_MME_SLOTS )
      {
         return SDB_INVALIDARG ;
      }

      if ( (UINT32)DMS_INVALID_CLID == clLID )
      {
         _metadataLatch.get_shared() ;
         clLID = _dmsMME->_mbList[mbID]._logicalID ;
         _metadataLatch.release_shared() ;
      }

      _latchContext.get() ;
      if ( _vecContext.size () > 0 )
      {
         *pContext = _vecContext.back () ;
         _vecContext.pop_back () ;
      }
      else
      {
         *pContext = SDB_OSS_NEW dmsMBContext ;
      }
      _latchContext.release() ;

      if ( !(*pContext) )
      {
         return SDB_OOM ;
      }
      (*pContext)->_clLID = clLID ;
      (*pContext)->_mbID = mbID ;
      (*pContext)->_mb = &_dmsMME->_mbList[mbID] ;
      (*pContext)->_mbStat = &_mbStatInfo[mbID] ;
      (*pContext)->_latch = &_mblock[mbID] ;
      if ( SHARED == lockType || EXCLUSIVE == lockType )
      {
         return (*pContext)->mbLock( lockType ) ;
      }
      return SDB_OK ;
   }
Example #2
0
   OSS_INLINE void _dmsStorageData::releaseMBContext( dmsMBContext *&pContext )
   {
      if ( !pContext )
      {
         return ;
      }
      pContext->mbUnlock() ;

      _latchContext.get() ;
      if ( _vecContext.size() < DMS_CONTEXT_MAX_SIZE )
      {
         pContext->_reset() ;
         _vecContext.push_back( pContext ) ;
      }
      else
      {
         SDB_OSS_DEL pContext ;
      }
      _latchContext.release() ;
      pContext = NULL ;
   }
Example #3
0
   /*
      IXM Tool functions
   */
   BSONObj ixmGetUndefineKeyObj( INT32 fieldNum )
   {
      static BSONObj s_undefineKeys[ IXM_MAX_PREALLOCATED_UNDEFKEY ] ;
      static BOOLEAN s_init = FALSE ;
      static ossSpinXLatch s_latch ;

      if ( FALSE == s_init )
      {
         s_latch.get() ;
         if ( FALSE == s_init )
         {
            for ( SINT32 i = 0; i < IXM_MAX_PREALLOCATED_UNDEFKEY ; ++i )
            {
               BSONObjBuilder b ;
               for ( SINT32 j = 0; j <= i; ++j )
               {
                  b.appendUndefined("") ;
               }
               s_undefineKeys[i] = b.obj() ;
            }
            s_init = TRUE ;
         }
         s_latch.release() ;
      }

      if ( fieldNum > 0 && fieldNum <= IXM_MAX_PREALLOCATED_UNDEFKEY )
      {
         return s_undefineKeys[ fieldNum - 1 ] ;
      }
      else
      {
         BSONObjBuilder b ;
         for ( INT32 i = 0; i < fieldNum; ++i )
         {
            b.appendUndefined("") ;
         }
         return b.obj() ;
      }
   }
Example #4
0
HANDLE ossGetSysMutexHandle( SYS_MUTEX_TYPE type )
{
   static HANDLE s_sysMutexes[ _NumOfFunctions ] = {0} ;
   static BOOLEAN s_init = FALSE ;
   static ossSpinXLatch s_latch ;

   if ( FALSE == s_init )
   {
      s_latch.get() ;
      if ( FALSE == s_init )
      {
         for ( int i = _SymInitialize; i < _NumOfFunctions ; i++ )
         {
             if ( ! s_sysMutexes[i] )
             {
                if ( i != _SymCleanup )
                {
                   s_sysMutexes[i] = CreateMutex( NULL,    // default security attr
                                                  false,   // initially not owned
                                                  NULL ) ; // unnamed mutex
                }
                else
                {
                   s_sysMutexes[i] = s_sysMutexes[ _SymInitialize ] ;
                }
             }
         }
         s_init = TRUE ;
      }
      s_latch.release() ;
   }
   if ( type >= _SymInitialize && type < _NumOfFunctions )
   {
      return s_sysMutexes[ (INT32)type ] ;
   }
   SDB_ASSERT( FALSE, "Invalid sys mutex type" ) ;
   return 0 ;
}
Example #5
0
 void unlock()
 {
    _isLock = FALSE ;
    _inLatch.release() ;
 }
Example #6
0
 void lock()
 {
    _inLatch.get() ;
    _isLock = TRUE ;
 }