Esempio n. 1
0
// PD_TRACE_DECLARE_FUNCTION ( SDB_OSSSYMINIT, "ossSymInitialize" )
UINT32 ossSymInitialize( HANDLE phProcess,
                         CHAR *  pUserSearchPath,
                         BOOLEAN bInvadeProcess )
{
   PD_TRACE_ENTRY ( SDB_OSSSYMINIT );
   static BOOLEAN  s_bSymInitialized = false ;
   UINT32 rc = ERROR_SUCCESS ;

   WaitForSingleObject( ossGetSysMutexHandle( _SymInitialize ), INFINITE ) ;
   if ( ! s_bSymInitialized )
   {
      if ( SymInitialize( phProcess, pUserSearchPath, bInvadeProcess ) )
      {
         s_bSymInitialized = TRUE ;
      }
      else
      {
         rc = GetLastError() ;
      }
   }
   ReleaseMutex ( ossGetSysMutexHandle( _SymInitialize ) ) ;

   if ( ERROR_SUCCESS != rc )
   {
      SetLastError( rc ) ;
   }
   PD_TRACE1 ( SDB_OSSSYMINIT, PD_PACK_UINT(rc) );
   PD_TRACE_EXIT ( SDB_OSSSYMINIT );
   return rc ;
}
Esempio n. 2
0
 // PD_TRACE_DECLARE_FUNCTION ( SDB_CATALOGCB_ALLOCGROUPID, "sdbCatalogueCB::AllocGroupID" )
 UINT32 sdbCatalogueCB::AllocGroupID ()
 {
    INT32 i = 0;
    UINT32 id = 0 ;
    PD_TRACE_ENTRY ( SDB_CATALOGCB_ALLOCGROUPID ) ;
    ossScopedLock _lock(&_GrpIDMutex, EXCLUSIVE) ;
    while ( i++ < CAT_DATA_NODE_MAX_NUM )
    {
       if ( _iCurGrpId < CAT_DATA_GROUP_ID_BEGIN )
       {
          _iCurGrpId = CAT_DATA_GROUP_ID_BEGIN;
       }
       GRP_ID_MAP::const_iterator it = _grpIdMap.find( _iCurGrpId );
       if ( it != _grpIdMap.end() )
       {
          _iCurGrpId++;
          continue;
       }
       it = _deactiveGrpIdMap.find( _iCurGrpId );
       if ( it != _deactiveGrpIdMap.end() )
       {
          _iCurGrpId++;
          continue;
       }
       id = _iCurGrpId ;
       goto done ;
    }
    id = CAT_INVALID_GROUPID ;
 done :
    PD_TRACE1 ( SDB_CATALOGCB_ALLOCGROUPID, PD_PACK_UINT ( id ) ) ;
    PD_TRACE_EXIT ( SDB_CATALOGCB_ALLOCGROUPID ) ;
    return id ;
 }
Esempio n. 3
0
 // PD_TRACE_DECLARE_FUNCTION ( SDB_CATALOGCB_GETAGROUPRAND, "sdbCatalogueCB::getAGroupRand" )
 INT32 sdbCatalogueCB::getAGroupRand( INT32 &groupID )
 {
    INT32 rc = SDB_CAT_NO_NODEGROUP_INFO ;
    PD_TRACE_ENTRY ( SDB_CATALOGCB_GETAGROUPRAND ) ;
    ossScopedLock _lock( &_GrpIDMutex, EXCLUSIVE ) ;
    UINT32 mapSize = _grpIdMap.size();
    PD_TRACE1 ( SDB_CATALOGCB_GETAGROUPRAND,
                PD_PACK_UINT ( mapSize ) ) ;
    if ( mapSize > 0 )
    {
       UINT32 randNum = ossRand() % mapSize;
       UINT32 i = 0;
       GRP_ID_MAP::iterator iterMap = _grpIdMap.begin();
       for ( ; i < randNum && iterMap!=_grpIdMap.end(); i++ )
       {
          ++iterMap;
       }
       if ( iterMap != _grpIdMap.end() )
       {
          groupID = iterMap->first;
          rc = SDB_OK ;
       }
    }
    PD_TRACE_EXITRC ( SDB_CATALOGCB_GETAGROUPRAND, rc ) ;
    return rc;
 }
Esempio n. 4
0
 // PD_TRACE_DECLARE_FUNCTION ( SDB_CATALOGCB_INSERTGROUPID, "sdbCatalogueCB::insertGroupID" )
 void sdbCatalogueCB::insertGroupID( UINT32 grpID, BOOLEAN isActive )
 {
    PD_TRACE_ENTRY ( SDB_CATALOGCB_INSERTGROUPID ) ;
    PD_TRACE2 ( SDB_CATALOGCB_INSERTGROUPID,
                PD_PACK_UINT ( grpID ),
                PD_PACK_UINT ( isActive ) ) ;
    if ( grpID >= CAT_DATA_GROUP_ID_BEGIN )
    {
       ossScopedLock _lock(&_GrpIDMutex, EXCLUSIVE) ;
       if ( isActive )
       {
          _grpIdMap.insert( GRP_ID_MAP::value_type(grpID, grpID) );
       }
       else
       {
          _deactiveGrpIdMap.insert( GRP_ID_MAP::value_type(grpID, grpID) );
       }
       _iCurGrpId = _iCurGrpId > grpID ? _iCurGrpId : ++grpID ;
    }
    PD_TRACE_EXIT ( SDB_CATALOGCB_INSERTGROUPID ) ;
 }
Esempio n. 5
0
 // PD_TRACE_DECLARE_FUNCTION ( SDB_CATALOGCB_REMOVEGROUPID, "sdbCatalogueCB::removeGroupID" )
 void sdbCatalogueCB::removeGroupID( UINT32 grpID )
 {
    PD_TRACE_ENTRY ( SDB_CATALOGCB_REMOVEGROUPID ) ;
    PD_TRACE1 ( SDB_CATALOGCB_REMOVEGROUPID,
                PD_PACK_UINT ( grpID ) ) ;
    if ( grpID >= CAT_DATA_GROUP_ID_BEGIN )
    {
       ossScopedLock _lock(&_GrpIDMutex, EXCLUSIVE) ;
       _grpIdMap.erase(grpID);
       _deactiveGrpIdMap.erase( grpID );
    }
    PD_TRACE_EXIT ( SDB_CATALOGCB_REMOVEGROUPID ) ;
    return ;
 }
Esempio n. 6
0
INT32 _ossModuleHandle::init ()
{
   INT32 rc = SDB_OK ;
   CHAR  strPath [ 2*OSS_MAX_PATHSIZE + 1 ] = {0} ;
   CHAR  strModule [ OSS_MAX_PATHSIZE + 1 ] = {0} ;
   OSS_MHANDLE handle = 0 ;
   CHAR *p = NULL ;
#if defined (_WINDOWS)
   UINT32 errorMode ;
#endif
   PD_TRACE_ENTRY ( SDB_OSSMODULEHANDLE_INIT ) ;
   if ( _moduleName[0] == '\0' )
   {
      PD_LOG ( PDERROR, "Module name can't be empty" ) ;
      rc = SDB_INVALIDARG ;
      goto error ;
   }
   PD_TRACE3 ( SDB_OSSMODULEHANDLE_INIT, PD_PACK_STRING(_moduleName),
               PD_PACK_STRING(_libPath), PD_PACK_UINT(_flags) ) ;
   ossStrncpy ( strModule, _moduleName, sizeof(strModule) ) ;
   p = ossStrchr ( strModule, '(' ) ;
   if ( p )
   {
      *p = '\0' ;
   }
   rc = patchModuleName( strModule, _moduleName, sizeof(_moduleName) );
   PD_RC_CHECK ( rc, PDERROR, "Failed to patch module name, rc = %d", rc ) ;
   if ( _libPath[0] )
   {
      INT32 pathLen = 0 ;
      rc = ossAccess ( _libPath,
#if defined (_LINUX)
                       F_OK
#elif defined (_WINDOWS)
                       0
#endif
      ) ;
      PD_RC_CHECK ( rc, PDERROR, "Failed to access path %s, rc = %d",
                    _libPath, rc ) ;
      ossStrncat ( strPath, _libPath, sizeof(strPath) ) ;
      pathLen = ossStrlen ( strPath ) ;
      if ( strPath[pathLen-1] != OSS_FILE_SEP_CHAR )
      {
         if ( pathLen >= OSS_MAX_PATHSIZE )
         {
            PD_LOG ( PDERROR, "library path is too long: %s",
                     _libPath ) ;
            rc = SDB_INVALIDARG ;
            goto error ;
         }
         strPath[pathLen-1] = OSS_FILE_SEP_CHAR ;
         strPath[pathLen]   = '\0' ;
      }
   }
   if ( ossStrlen ( strPath ) + ossStrlen ( _moduleName ) >= sizeof(strPath) )
   {
      PD_LOG ( PDERROR, "path + module name is too long: %s:%s",
               strPath, _moduleName ) ;
      rc = SDB_INVALIDARG ;
      goto error ;
   }
   ossStrncat ( strPath, _moduleName, OSS_MAX_PATHSIZE ) ;
#if defined (_LINUX)
   handle = dlopen ( strPath, _flags | RTLD_NOW ) ;
   if ( !handle )
   {
      PD_LOG ( PDERROR, "Failed to load module %s, error = %s",
               strPath, dlerror() ) ;
      rc = SDB_SYS ;
      goto error ;
   }
   _isInitialized = TRUE ;
   _moduleHandle = handle ;
   dlerror() ;
#elif defined (_WINDOWS)
   errorMode = SetErrorMode ( SEM_NOOPENFILEERRORBOX |
                              SEM_FAILCRITICALERRORS ) ;
   _moduleHandle = LoadLibrary ( (LPCTSTR)strPath ) ;
   SetErrorMode ( errorMode ) ;
   if ( NULL == _moduleHandle )
   {
      rc = ossGetLastError () ;
      PD_LOG ( PDERROR, "Failed to load module %s, error = %d",
               _moduleName, rc ) ;
      OSSMODULEHANDLE_ERR(rc) ;
      goto error ;
   }
#endif
done :
   PD_TRACE_EXITRC ( SDB_OSSMODULEHANDLE_INIT, rc ) ;
   return rc ;
error :
   _isInitialized = FALSE ;
   _moduleHandle = OSS_MINVALIDHANDLE ;
   goto done ;
}