Example #1
0
_dpsLogPage::_dpsLogPage()
{
    _mb = SDB_OSS_NEW _dpsMessageBlock( DPS_DEFAULT_PAGE_SIZE );
    if ( NULL == _mb )
    {
        pdLog(PDERROR, __FUNC__, __FILE__, __LINE__,
              "new _dpsMessageBlock failed!");
    }
    _startPage = DPS_LSN_START_FROM_HEAD;
}
Example #2
0
_dpsLogPage::_dpsLogPage( UINT32 size )
{
    _mb = SDB_OSS_NEW _dpsMessageBlock( size );
    if ( NULL == _mb )
    {
        pdLog(PDERROR, __FUNC__, __FILE__, __LINE__,
              "new _dpsMessageBlock failed!");
    }

    _startPage = DPS_LSN_START_FROM_HEAD;
}
Example #3
0
void _impRecordParseLog( const CHAR *pFunc,
                         const CHAR *pFile,
                         UINT32 line,
                         const CHAR *pFmt,
                         ... )
{
   va_list ap ;
   CHAR buffer[ PD_LOG_STRINGMAX + 1 ] = { 0 } ;
   va_start( ap, pFmt ) ;
   vsnprintf( buffer, PD_LOG_STRINGMAX, pFmt, ap ) ;
   va_end( ap ) ;
   pdLog( PDERROR, pFunc, pFile, line, buffer ) ;
}
Example #4
0
INT32 _dpsLogPage::fill( UINT32 offset, const CHAR *src, UINT32 len )
{
    INT32 rc = SDB_OK ;
    PD_TRACE_ENTRY ( SDB__DPSLGPAGE );
    if ( !_mb )
    {
        _mb = SDB_OSS_NEW _dpsMessageBlock( DPS_DEFAULT_PAGE_SIZE );
        if ( NULL == _mb )
        {
            pdLog(PDERROR, __FUNC__, __FILE__, __LINE__,
                  "new _dpsMessageBlock failed!");
            rc = SDB_OOM ;
            goto error ;
        }
    }
    ossMemcpy ( _mb->offset( offset ), src, len ) ;
done :
    PD_TRACE_EXITRC ( SDB__DPSLGPAGE, rc );
    return rc ;
error :
    goto done ;
}
Example #5
0
INT32 _dpsLogPage::allocate( UINT32 len )
{
    INT32 rc = SDB_OK;
    PD_TRACE_ENTRY ( SDB__DPSLGPAGE2 );
    if ( !_mb )
    {
        _mb = SDB_OSS_NEW _dpsMessageBlock( DPS_DEFAULT_PAGE_SIZE );
        if ( NULL == _mb )
        {
            pdLog(PDERROR, __FUNC__, __FILE__, __LINE__,
                  "new _dpsMessageBlock failed!");
            rc = SDB_OOM ;
            goto error ;
        }
    }
    SDB_ASSERT ( getLastSize() >= len, "len is greater than buffer size" ) ;
    _mb->writePtr( len + _mb->length() );

done :
    PD_TRACE_EXITRC ( SDB__DPSLGPAGE2, rc );
    return rc ;
error :
    goto done ;
}
Example #6
0
   // PD_TRACE_DECLARE_FUNCTION ( SDB_OSSSTKTRA, "ossStackTrace" )
   void ossStackTrace( LPEXCEPTION_POINTERS lpEP, const CHAR * dumpDir )
   {
      PD_TRACE_ENTRY ( SDB_OSSSTKTRA );
      SYMBOL_INFO  * pSymbol = NULL ;
      HANDLE  hProcess ;
      void  * stack[ OSS_MAX_BACKTRACE_FRAMES_SUPPORTED + 1 ] = { 0 } ;
      CHAR pName[ OSS_FUNC_NAME_LEN_MAX + 1 ]  ;
      UINT32 frames = 0 ;
      SYSTEM_INFO sysInfo = { 0 } ;
      OSVERSIONINFOEX OSVerInfo={ 0 } ;
      ossPrimitiveFileOp trapFile ;
      CHAR fileName[ OSS_MAX_PATHSIZE + 1 ] = { 0 } ;
      UINT32 StrLen = 0 ;

      ossSnprintf ( fileName, OSS_MAX_PATHSIZE, "%d.%d.trap",
                    ossGetCurrentProcessID(),
                    ossGetCurrentThreadID() ) ;
      if ( OSS_MAX_PATHSIZE <
              ossStrlen ( dumpDir ) + ossStrlen ( OSS_PRIMITIVE_FILE_SEP ) +
              ossStrlen ( fileName ) )
      {
          pdLog ( PDERROR, __FUNC__, __FILE__, __LINE__,
                  "path + file name is too long" ) ;
          goto error ;
      }

      ossMemset( fileName, 0, sizeof( fileName ) ) ;
      StrLen += ossSnprintf( fileName, sizeof( fileName ), "%s%s",
                             dumpDir, OSS_PRIMITIVE_FILE_SEP ) ;
      ossSnprintf( fileName + StrLen, sizeof(fileName) - StrLen,
                   "%d.%d.trap",
                   ossGetCurrentProcessID(),
                   ossGetCurrentThreadID() ) ;

      trapFile.Open( fileName ) ;

      if ( trapFile.isValid() )
      {
         trapFile.seekToEnd () ;
         trapFile.Write(" -------- System Information --------\n" ) ;
         ossDumpSystemTime ( &trapFile ) ;
         ossDumpDatabaseInfo ( &trapFile ) ;
         GetSystemInfo( &sysInfo ) ;
         switch( sysInfo.wProcessorArchitecture )
         {
            case PROCESSOR_ARCHITECTURE_INTEL:
                 trapFile.Write( "Processor : Intel x86\n" ) ;
                 break ;
            case PROCESSOR_ARCHITECTURE_IA64:
                 trapFile.Write( "Processor : Intel IA64\n" ) ;
                 break ;
            case PROCESSOR_ARCHITECTURE_AMD64:
                 trapFile.Write( "Processor : AMD 64\n") ;
                 break ;
            default:
                 trapFile.Write( "Unknown processor architecture ") ;
         }
         trapFile.fWrite( " Number of processors: %u Page size: %u\n"
                          " Min application address: %lx"
                          " Max application address: %lx\n"
                          "  Active processor mask: %u\n",
                         sysInfo.dwNumberOfProcessors,
                         sysInfo.dwPageSize,
                         sysInfo.lpMinimumApplicationAddress,
                         sysInfo.lpMaximumApplicationAddress,
                         sysInfo.dwActiveProcessorMask ) ;

         OSVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
         GetVersionEx ( (OSVERSIONINFO*) &OSVerInfo ) ;
         if ( OSVerInfo.dwMajorVersion == 6 )
         {
            if ( OSVerInfo.dwMinorVersion == 0 )
            {
               if ( OSVerInfo.wProductType == VER_NT_WORKSTATION )
               {
                  trapFile.Write( "Windows Vista " ) ;
               }
               else
               {
                  trapFile.Write( "Windows Server 2008 " ) ;
               }
            }
            if ( OSVerInfo.dwMinorVersion == 1 )
            {
               if ( OSVerInfo.wProductType == VER_NT_WORKSTATION )
               {
                  trapFile.Write( "Windows 7 " ) ;
               }
               else
               {
                  trapFile.Write( "Windows Server 2008 " ) ;
               }
            }
         }
         if ( OSVerInfo.dwMajorVersion == 5 && OSVerInfo.dwMinorVersion == 2 )
         {
            if ( OSVerInfo.wProductType == VER_NT_WORKSTATION )
            {
               trapFile.Write( "Windows XP " ) ;
            }
            else
            {
               trapFile.Write( "Windows Server 2003 " ) ;
            }
         }
         if ( OSVerInfo.dwMajorVersion == 5 && OSVerInfo.dwMinorVersion == 1 )
         {
            trapFile.Write("Windows XP ") ;
         }
         if ( OSVerInfo.dwMajorVersion == 5 && OSVerInfo.dwMinorVersion == 0 )
         {
            trapFile.Write("Windows 2000 ") ;
         }
         trapFile.fWrite( "%s ( %d.%d) Build:%d\n",
                          OSVerInfo.szCSDVersion,
                          OSVerInfo.dwMajorVersion,
                          OSVerInfo.dwMinorVersion,
                          OSVerInfo.dwBuildNumber ) ;

         hProcess = GetCurrentProcess() ;

         pSymbol = ( SYMBOL_INFO * )SDB_OSS_MALLOC(
                       sizeof( SYMBOL_INFO ) +
                       OSS_FUNC_NAME_LEN_MAX * sizeof( char ) ) ;
         if ( NULL != pSymbol )
         {
            ossMemset( pSymbol, 0,
                       sizeof( SYMBOL_INFO ) +
                       OSS_FUNC_NAME_LEN_MAX * sizeof(char) ) ;
            pSymbol->MaxNameLen = OSS_FUNC_NAME_LEN_MAX ;
            pSymbol->SizeOfStruct = sizeof( SYMBOL_INFO ) ;
            ossSymInitialize( hProcess, NULL, TRUE ) ;

            if ( NULL != lpEP )
            {
               trapFile.Write( "-------- Registers --------\n" ) ;
            #ifndef _WIN64
               trapFile.fWrite( SEGREG,
                                lpEP->ContextRecord->SegGs,
                                lpEP->ContextRecord->SegFs,
                                lpEP->ContextRecord->SegEs,
                                lpEP->ContextRecord->SegDs ) ;
               trapFile.fWrite( INTREG,
                                (void*)lpEP->ContextRecord->Edi,
                                (void*)lpEP->ContextRecord->Esi,
                                (void*)lpEP->ContextRecord->Eax,
                                (void*)lpEP->ContextRecord->Ebx,
                                (void*)lpEP->ContextRecord->Ecx,
                                (void*)lpEP->ContextRecord->Edx ) ;
               trapFile.fWrite( CTXREG,
                                (void*)lpEP->ContextRecord->Ebp,
                                (void*)lpEP->ContextRecord->Eip,
                                (void*)lpEP->ContextRecord->Esp,
                                (void*)lpEP->ContextRecord->EFlags,
                                lpEP->ContextRecord->SegCs,
                                lpEP->ContextRecord->SegSs ) ;
            #elif defined(_M_AMD64)
               trapFile.fWrite( SEGREG,
                                lpEP->ContextRecord->SegGs,
                                lpEP->ContextRecord->SegFs,
                                lpEP->ContextRecord->SegEs,
                                lpEP->ContextRecord->SegDs ) ;
               trapFile.fWrite( INTREG,
                                (void*)lpEP->ContextRecord->Rdi,
                                (void*)lpEP->ContextRecord->Rsi,
                                (void*)lpEP->ContextRecord->Rax,
                                (void*)lpEP->ContextRecord->Rbx,
                                (void*)lpEP->ContextRecord->Rcx,
                                (void*)lpEP->ContextRecord->Rdx,
                                (void*)lpEP->ContextRecord->R8,
                                (void*)lpEP->ContextRecord->R9,
                                (void*)lpEP->ContextRecord->R10,
                                (void*)lpEP->ContextRecord->R11,
                                (void*)lpEP->ContextRecord->R12,
                                (void*)lpEP->ContextRecord->R13,
                                (void*)lpEP->ContextRecord->R14,
                                (void*)lpEP->ContextRecord->R15 ) ;
               trapFile.fWrite( CTXREG,
                                (void*)lpEP->ContextRecord->Rbp,
                                (void*)lpEP->ContextRecord->Rip,
                                (void*)lpEP->ContextRecord->Rsp,
                                (void*)lpEP->ContextRecord->EFlags,
                                lpEP->ContextRecord->SegCs,
                                lpEP->ContextRecord->SegSs ) ;
            #endif

               trapFile.fWrite( "-------- Point of failure --------\n" ) ;
               ossMemset( pName, 0, sizeof( pName ) ) ;
               ossGetSymbolNameFromAddress( hProcess,
                  (UINT64)lpEP->ExceptionRecord->ExceptionAddress,
                  pSymbol, pName, sizeof( pName ) ) ;
               trapFile.fWrite( "%s\n", pName ) ;
            }  // if NULL != lpEP

            trapFile.fWrite( "\n-------- Stack frames --------\n" ) ;
         #ifndef _WIN64
            if ( NULL != lpEP )
            {
               frames = ossWalkStackEx( lpEP,
                                        0,
                                        OSS_MAX_BACKTRACE_FRAMES_SUPPORTED,
                                        stack ) ;
            }
            else
            {
         #endif
               frames = ossWalkStack( 0,
                                      OSS_MAX_BACKTRACE_FRAMES_SUPPORTED,
                                      stack ) ;
         #ifndef _WIN64
            }
         #endif

            for ( UINT32 i = 0; i < frames; i++ )
            {
                ossMemset( pName, 0, sizeof( pName ) ) ;
                ossGetSymbolNameFromAddress(
                   hProcess, (UINT64)stack[i], pSymbol, pName, sizeof( pName ) ) ;
                trapFile.fWrite(  "%3i: %s\n", i, pName ) ;
            }
            SDB_OSS_FREE( pSymbol ) ;
         }  // if NULL != pSymbol
      }
   error :
      trapFile.Close() ;
      PD_TRACE_EXIT ( SDB_OSSSTKTRA );
      return ;
   }