greenplumn init 源码
greenplumn init 代码
文件路径:/src/backend/gporca/libnaucrates/src/init.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2010 Greenplum, Inc.
//
// @filename:
// init.cpp
//
// @doc:
// Implementation of initialization and termination functions for
// libgpdxl.
//---------------------------------------------------------------------------
#include "naucrates/init.h"
#include <xercesc/framework/MemBufInputSource.hpp>
#include <xercesc/util/XMLString.hpp>
#include "gpos/memory/CAutoMemoryPool.h"
#include "naucrates/dxl/parser/CParseHandlerFactory.h"
#include "naucrates/dxl/xml/CDXLMemoryManager.h"
#include "naucrates/dxl/xml/dxltokens.h"
#include "naucrates/exception.h"
using namespace gpos;
using namespace gpdxl;
static CDXLMemoryManager *dxl_memory_manager = nullptr;
static CMemoryPool *pmpXerces = nullptr;
static CMemoryPool *pmpDXL = nullptr;
// safe-guard to prevent initializing DXL support more than once
static ULONG_PTR m_ulpInitDXL = 0;
// safe-guard to prevent shutting DXL support down more than once
static ULONG_PTR m_ulpShutdownDXL = 0;
//---------------------------------------------------------------------------
// @function:
// InitDXL
//
// @doc:
// Initialize DXL support; must be called before any library
// function is called
//
//
//---------------------------------------------------------------------------
void
InitDXL()
{
if (0 < m_ulpInitDXL)
{
// DXL support is already initialized by a previous call
return;
}
GPOS_ASSERT(nullptr != pmpXerces);
GPOS_ASSERT(nullptr != pmpDXL);
// setup own memory manager
dxl_memory_manager = GPOS_NEW(pmpXerces) CDXLMemoryManager(pmpXerces);
// initialize Xerces, if this fails library initialization should crash here
XMLPlatformUtils::Initialize(
XMLUni::fgXercescDefaultLocale, // locale
nullptr, // nlsHome: location for message files
nullptr, // panicHandler
dxl_memory_manager // memoryManager
);
// initialize DXL tokens
CDXLTokens::Init(pmpDXL);
// initialize parse handler mappings
CParseHandlerFactory::Init(pmpDXL);
m_ulpInitDXL++;
}
//---------------------------------------------------------------------------
// @function:
// ShutdownDXL
//
// @doc:
// Shutdown DXL support; called only at library termination
//
//---------------------------------------------------------------------------
void
ShutdownDXL()
{
if (0 < m_ulpShutdownDXL)
{
// DXL support is already shut-down by a previous call
return;
}
GPOS_ASSERT(nullptr != pmpXerces);
m_ulpShutdownDXL++;
XMLPlatformUtils::Terminate();
CDXLTokens::Terminate();
GPOS_DELETE(dxl_memory_manager);
dxl_memory_manager = nullptr;
}
//---------------------------------------------------------------------------
// @function:
// gpdxl_init
//
// @doc:
// Initialize Xerces parser utils
//
//---------------------------------------------------------------------------
void
gpdxl_init()
{
// create memory pool for Xerces global allocations
{
CAutoMemoryPool amp;
// detach safety
pmpXerces = amp.Detach();
}
// create memory pool for DXL global allocations
{
CAutoMemoryPool amp;
// detach safety
pmpDXL = amp.Detach();
}
// add standard exception messages
(void) EresExceptionInit(pmpDXL);
}
//---------------------------------------------------------------------------
// @function:
// gpdxl_terminate
//
// @doc:
// Terminate Xerces parser utils and destroy memory pool
//
//---------------------------------------------------------------------------
void
gpdxl_terminate()
{
#ifdef GPOS_DEBUG
ShutdownDXL();
if (nullptr != pmpDXL)
{
(CMemoryPoolManager::GetMemoryPoolMgr())->Destroy(pmpDXL);
pmpDXL = nullptr;
}
if (nullptr != pmpXerces)
{
(CMemoryPoolManager::GetMemoryPoolMgr())->Destroy(pmpXerces);
pmpXerces = nullptr;
}
#endif // GPOS_DEBUG
}
// EOF
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦