Renamed version4 to flaim and version5 to xflaim
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@7 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
155
flaim/src/flclose.cpp
Normal file
155
flaim/src/flclose.cpp
Normal file
@@ -0,0 +1,155 @@
|
||||
//-------------------------------------------------------------------------
|
||||
// Desc: Close a database
|
||||
// Tabs: 3
|
||||
//
|
||||
// Copyright (c) 1990-1992,1995-2003,2005-2006 Novell, Inc. All Rights Reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of version 2 of the GNU General Public
|
||||
// License as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, contact Novell, Inc.
|
||||
//
|
||||
// To contact Novell about this file by physical or electronic mail,
|
||||
// you may find current contact information at www.novell.com
|
||||
//
|
||||
// $Id: flclose.cpp 12329 2006-01-20 17:49:30 -0700 (Fri, 20 Jan 2006) ahodgkinson $
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
#include "flaimsys.h"
|
||||
|
||||
/****************************************************************************
|
||||
Desc : Closes a FLAIM database.
|
||||
****************************************************************************/
|
||||
RCODE flmDbClose(
|
||||
HFDB * phDbRV,
|
||||
FLMBOOL bMutexLocked)
|
||||
{
|
||||
FDB * pDb;
|
||||
|
||||
if ((!phDbRV) ||
|
||||
((pDb = (FDB *)*phDbRV) == NULL))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if (IsInCSMode( pDb))
|
||||
{
|
||||
CS_CONTEXT_p pCSContext = pDb->pCSContext;
|
||||
FCL_WIRE Wire( pCSContext, pDb);
|
||||
|
||||
if( pCSContext->bConnectionGood)
|
||||
{
|
||||
|
||||
// Send the request to close the database.
|
||||
|
||||
if (RC_BAD( Wire.sendOp(
|
||||
FCS_OPCLASS_DATABASE, FCS_OP_DATABASE_CLOSE)))
|
||||
{
|
||||
goto Finish_Close;
|
||||
}
|
||||
|
||||
if (RC_BAD( Wire.sendTerminate()))
|
||||
{
|
||||
goto Transmission_Error;
|
||||
}
|
||||
|
||||
/* Read the response. */
|
||||
|
||||
if (RC_BAD( Wire.read()))
|
||||
{
|
||||
goto Transmission_Error;
|
||||
}
|
||||
|
||||
Wire.getRCode();
|
||||
goto Finish_Close;
|
||||
Transmission_Error:
|
||||
pDb->pCSContext->bConnectionGood = FALSE;
|
||||
}
|
||||
|
||||
Finish_Close:
|
||||
|
||||
// Reset misc. variables.
|
||||
|
||||
(void)flmCloseCSConnection( &pDb->pCSContext);
|
||||
pDb->pCSContext = NULL;
|
||||
}
|
||||
|
||||
if (pDb->uiTransType != FLM_NO_TRANS)
|
||||
{
|
||||
|
||||
// Force nested transactions to close.
|
||||
|
||||
pDb->uiInFlmFunc++;
|
||||
(void)FlmDbTransAbort( (HFDB)pDb);
|
||||
pDb->uiInFlmFunc--;
|
||||
}
|
||||
|
||||
// Free the super file.
|
||||
|
||||
if( pDb->pSFileHdl)
|
||||
{
|
||||
// Opened files will be released back to the
|
||||
// file handle manager
|
||||
pDb->pSFileHdl->Release();
|
||||
}
|
||||
|
||||
// Unlink the FDB from the FFILE and FDICT structures.
|
||||
|
||||
if (!bMutexLocked)
|
||||
{
|
||||
f_mutexLock( gv_FlmSysData.hShareMutex);
|
||||
}
|
||||
flmUnlinkFdbFromDict( pDb);
|
||||
flmUnlinkFdbFromFile( pDb);
|
||||
|
||||
if (!bMutexLocked)
|
||||
{
|
||||
f_mutexUnlock( gv_FlmSysData.hShareMutex);
|
||||
}
|
||||
|
||||
// Free the temporary pool
|
||||
|
||||
GedPoolFree( &pDb->TempPool);
|
||||
GedPoolFree( &pDb->tmpKrefPool);
|
||||
|
||||
// Free up statistics.
|
||||
|
||||
if (pDb->bStatsInitialized)
|
||||
{
|
||||
FlmFreeStats( &pDb->Stats);
|
||||
}
|
||||
|
||||
// Get rid of mutex
|
||||
|
||||
#if defined( FLM_DEBUG) && (defined( FLM_WIN) || defined( FLM_NLM))
|
||||
if (pDb->hMutex != F_MUTEX_NULL)
|
||||
{
|
||||
f_mutexDestroy( &pDb->hMutex);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Free the FDB.
|
||||
|
||||
f_free( phDbRV);
|
||||
|
||||
Exit:
|
||||
|
||||
return( FERR_OK);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc: Closes a FLAIM database.
|
||||
****************************************************************************/
|
||||
RCODE FlmDbClose(
|
||||
HFDB * phDbRV)
|
||||
{
|
||||
return( flmDbClose( phDbRV, FALSE));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user