// write log file static int _pdLogFileWrite ( const char *pData ) { int rc = GHDB_OK ; size_t dataSize = strlen ( pData ) ; _pdLogMutex.get() ; if ( !_pdLogFile.isValid() ) { // open the file rc = _pdLogFileReopen () ; if ( rc ) { printf ( "Failed to open log file, errno = %d"OSS_NEWLINE, rc ) ; goto error ; } } // write into the file rc = _pdLogFile.Write ( pData, dataSize ) ; if ( rc ) { printf ( "Failed to write into log file, errno = %d"OSS_NEWLINE, rc ) ; goto error ; } done : _pdLogMutex.release() ; return rc ; error : goto done ; }
// open log file static int _pdLogFileReopen () { int rc = GHDB_OK ; _pdLogFile.Close() ; rc = _pdLogFile.Open ( _pdDiagLogPath ) ; if ( rc ) { printf ( "Failed to open log file, errno = %d"OSS_NEWLINE, rc ) ; goto error ; } _pdLogFile.seekToEnd () ; done : return rc ; error : goto done ; }
static UINT64 ossMemTraceDump ( void *p, ossPrimitiveFileOp &trapFile ) { CHAR lineBuffer [ OSSMEMTRACEDUMPBUFSZ + 1 ] = {0} ; CHAR *pAddr = (CHAR*)p ; ossMemset ( lineBuffer, 0, sizeof(lineBuffer) ) ; ossSnprintf ( lineBuffer, sizeof(lineBuffer), " Address: %p\n", pAddr ) ; trapFile.Write ( lineBuffer ) ; ossMemset ( lineBuffer, 0, sizeof(lineBuffer) ) ; ossSnprintf ( lineBuffer, sizeof(lineBuffer), " Freed: %s, Size: %lld, DebugSize: %d\n", (*(UINT32*)(pAddr+OSS_MEM_HEAD_FREEDOFFSET))==0?"false":"true", (*(UINT64*)(pAddr+OSS_MEM_HEAD_SIZEOFFSET)), (*(UINT32*)(pAddr+OSS_MEM_HEAD_DEBUGOFFSET)) ) ; trapFile.Write ( lineBuffer ) ; ossMemset ( lineBuffer, 0, sizeof(lineBuffer) ) ; ossSnprintf ( lineBuffer, sizeof(lineBuffer), " File: 0x%x, Line: %d\n", (*(UINT32*)(pAddr+OSS_MEM_HEAD_FILEOFFSET)), (*(UINT32*)(pAddr+OSS_MEM_HEAD_LINEOFFSET)) ) ; trapFile.Write ( lineBuffer ) ; trapFile.Write ( "\n" ) ; return (*(UINT64*)(pAddr+OSS_MEM_HEAD_SIZEOFFSET)) ; }