Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*==========================================================================
* * Copyright (C) 2000 Microsoft Corporation. All Rights Reserved. * * File: GroupCon.cpp * Content: Group Connection object routines *@@BEGIN_MSINTERNAL * History: * Date By Reason * ==== == ====== * 03/02/00 mjn Created * 04/18/00 mjn CConnection tracks connection status better * 05/05/00 mjn Added GetConnectionRef() * 08/15/00 mjn Added SetGroup() * mjn Fixed Release() to take locks and cleanup m_pGroup *@@END_MSINTERNAL * ***************************************************************************/
#include "dncorei.h"
void CGroupConnection::ReturnSelfToPool( void ) { g_GroupConnectionPool.Release( this ); }
#undef DPF_MODNAME
#define DPF_MODNAME "CGroupConnection::Release"
void CGroupConnection::Release(void) { LONG lRefCount;
DNASSERT(m_lRefCount > 0); lRefCount = DNInterlockedDecrement(const_cast<LONG*>(&m_lRefCount)); if (lRefCount == 0) { if (m_pGroup) { m_pGroup->Lock(); RemoveFromConnectionList(); m_pGroup->Unlock();
m_pGroup->Release(); m_pGroup = NULL; } if (m_pConnection) { m_pConnection->Release(); m_pConnection = NULL; } m_dwFlags = 0; m_lRefCount = 0; ReturnSelfToPool(); } }
void CGroupConnection::SetConnection( CConnection *const pConnection ) { if (pConnection) { pConnection->Lock(); if (pConnection->IsConnected()) { pConnection->AddRef(); m_pConnection = pConnection; } pConnection->Unlock(); } }
#undef DPF_MODNAME
#define DPF_MODNAME "CGroupConnection::GetConnectionRef"
HRESULT CGroupConnection::GetConnectionRef( CConnection **const ppConnection ) { HRESULT hResultCode;
DNASSERT( ppConnection != NULL);
Lock(); if ( m_pConnection && !m_pConnection->IsInvalid()) { m_pConnection->AddRef(); *ppConnection = m_pConnection; hResultCode = DPN_OK; } else { hResultCode = DPNERR_NOCONNECTION; } Unlock();
return( hResultCode ); }
void CGroupConnection::SetGroup( CNameTableEntry *const pGroup ) { if (pGroup) { pGroup->AddRef(); } m_pGroup = pGroup; }
|