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.
|
|
/*
* refcount.cpp - RefCount class implementation. */
/* Headers
**********/
#include "project.hpp" // for ULONG_MAX...
#include "refcount.hpp"
extern ULONG DllAddRef(void); extern ULONG DllRelease(void);
/********************************** Methods **********************************/
RefCount::RefCount(void) { // Don't validate this until after initialization.
m_ulcRef = 1; DllAddRef();
return; }
RefCount::~RefCount(void) { // m_ulcRef may be any value.
DllRelease();
return; }
ULONG STDMETHODCALLTYPE RefCount::AddRef(void) { ULONG ulRet = 0;
// this is really bad... returns an error of some kind
if(m_ulcRef >= ULONG_MAX) { ulRet = 0; goto exit; }
m_ulcRef++;
ulRet = m_ulcRef; exit: return(ulRet); }
ULONG STDMETHODCALLTYPE RefCount::Release(void) { ULONG ulcRef;
if (m_ulcRef > 0) m_ulcRef--;
ulcRef = m_ulcRef;
if (! ulcRef) delete this;
return(ulcRef); }
|