cbdata.cc File Reference
#include "squid.h"
#include "cbdata.h"
#include "Generic.h"
#include "mem/Allocator.h"
#include "mem/Pool.h"
#include "mgr/Registration.h"
#include "Store.h"
#include <climits>
#include <cstddef>
#include <map>
Include dependency graph for cbdata.cc:

Go to the source code of this file.

Classes

class  cbdata
 
struct  CBDataIndex
 

Functions

cbdata_type cbdataInternalAddType (cbdata_type type, const char *name, int size)
 
void * cbdataInternalAlloc (cbdata_type type)
 
static void cbdataRealFree (cbdata *c)
 
void * cbdataInternalFree (void *p)
 
void cbdataInternalLock (const void *p)
 
void cbdataInternalUnlock (const void *p)
 
int cbdataReferenceValid (const void *p)
 
int cbdataInternalReferenceDoneValid (void **pp, void **tp)
 

Variables

static int cbdataCount = 0
 
struct CBDataIndexcbdata_index = nullptr
 
int cbdata_types = 0
 
static std::map< const void *, cbdata * > cbdata_htable
 

Function Documentation

◆ cbdataInternalAddType()

cbdata_type cbdataInternalAddType ( cbdata_type  type,
const char *  label,
int  size 
)

Create a run-time registration for the class type with cbdata memory allocator.

Note
For internal CBDATA use only.

Definition at line 117 of file cbdata.cc.

References assert, cbdata_index, cbdata_types, memPoolCreate, CBDataIndex::pool, size, xmalloc, and xrealloc().

◆ cbdataInternalAlloc()

void * cbdataInternalAlloc ( cbdata_type  type)

Allocates a new entry of a registered CBDATA type.

Note
For internal CBDATA use only.

Definition at line 145 of file cbdata.cc.

References Mem::Allocator::alloc(), assert, cbdata_htable, cbdata_index, cbdata_types, cbdataCount, cbdata::cookie, cbdata::Cookie, cbdata::data, debugs, cbdata::locks, CBDataIndex::pool, cbdata::type, and cbdata::valid.

◆ cbdataInternalFree()

void * cbdataInternalFree ( void *  p)

Frees a entry allocated by cbdataInternalAlloc().

Once this has been called cbdataReferenceValid() and cbdataReferenceValidDone() will return false regardless of whether there are remaining cbdata references.

cbdataReferenceDone() must still be called for any active references to the cbdata entry. The cbdata entry will be freed only when the last reference is removed.

Note
For internal CBDATA use only.

Definition at line 203 of file cbdata.cc.

References assert, cbdataRealFree(), debugs, and cbdata::FromUserData().

◆ cbdataInternalLock()

void cbdataInternalLock ( const void *  p)

Definition at line 221 of file cbdata.cc.

References assert, debugs, cbdata::FromUserData(), and INT_MAX.

Referenced by logfile_mod_daemon_open().

◆ cbdataInternalReferenceDoneValid()

int cbdataInternalReferenceDoneValid ( void **  p,
void **  tp 
)

Removes a reference created by cbdataReference() and checks it for validity. Meant to be used on the last dereference, usually to make a callback.

void *cbdata;
...
if (cbdataReferenceValidDone(reference, &cbdata)))
callback(..., cbdata);
#define cbdataReferenceValidDone(var, ptr)
Definition: cbdata.h:239
Definition: cbdata.cc:38
Parameters
varThe reference variable. Will be automatically cleared to nullptr
ptrA temporary pointer to the referenced data (if valid).

Definition at line 282 of file cbdata.cc.

References cbdataInternalUnlock(), and cbdataReferenceValid().

◆ cbdataInternalUnlock()

void cbdataInternalUnlock ( const void *  p)

◆ cbdataRealFree()

static void cbdataRealFree ( cbdata c)
static

Definition at line 173 of file cbdata.cc.

References cbdata_htable, cbdataCount, cbdata::data, and debugs.

Referenced by cbdataInternalFree(), and cbdataInternalUnlock().

◆ cbdataReferenceValid()

int cbdataReferenceValid ( const void *  p)
Parameters
pA cbdata entry reference pointer.
Return values
0A reference is stale. The pointer refers to a entry already freed.
trueThe reference is valid and active.

Definition at line 265 of file cbdata.cc.

References assert, debugs, and cbdata::FromUserData().

Referenced by CbcPointer< Cbc >::CbcPointer(), ConnStateData::borrowPinnedConnection(), ACLChecklist::calcImplicitAnswer(), ACLChecklist::callerGone(), AsyncJob::callException(), AsyncJob::callStart(), StoreIOStateCb::canDial(), EventDialer::canDial(), CommCbFunPtrCallT< Dialer >::canFire(), cbdataInternalReferenceDoneValid(), EventScheduler::checkEvents(), Helper::Session::checkForTimedOutRequests(), clientGetMoreData(), clientSocketDetach(), clientSocketRecipient(), clientStreamDetach(), ACLFilledChecklist::conn(), diskHandleRead(), downloaderRecipient(), EventScheduler::dump(), esiBufferRecipient(), esiProcessStream(), esiStreamDetach(), esiStreamRead(), esiStreamStatus(), externalAclHandleReply(), ACLChecklist::fastCheck(), ftpSendReply(), CbcPointer< Cbc >::get(), ClientHttpRequest::getConn(), Comm::Connection::getPeer(), DiskdIOStrategy::handle(), helperDispatch(), helperHandleRead(), helperReturnBuffer(), helperStatefulDispatch(), helperStatefulHandleRead(), ClientRequestContext::httpStateIsValid(), idnsCallbackOneWithAnswer(), ConnStateData::isOpen(), TunnelStateData::keepGoingAfterRead(), ClientHttpRequest::noteAdaptationAnswer(), CbcPointer< Cbc >::operator=(), peerCountMcastPeersAbort(), peerDigestFetchedEnough(), peerDigestHandleReply(), ACLChecklist::prepNonBlocking(), TunnelStateData::ReadClient(), TunnelStateData::ReadServer(), clientReplyContext::sendMoreData(), SslBumpEstablish(), tunnelStartShoveling(), CallbackData::valid(), PeerPoolMgr::validPeer(), TunnelStateData::writeClientDone(), TunnelStateData::WriteClientDone(), TunnelStateData::writeServerDone(), and TunnelStateData::WriteServerDone().

Variable Documentation

◆ cbdata_htable

std::map<const void *, cbdata *> cbdata_htable
static

Definition at line 93 of file cbdata.cc.

Referenced by cbdataInternalAlloc(), cbdataRealFree(), and cbdata::FromUserData().

◆ cbdata_index

struct CBDataIndex * cbdata_index = nullptr

◆ cbdata_types

int cbdata_types = 0

Definition at line 90 of file cbdata.cc.

Referenced by cbdataInternalAddType(), and cbdataInternalAlloc().

◆ cbdataCount

int cbdataCount = 0
static

Definition at line 26 of file cbdata.cc.

Referenced by cbdataInternalAlloc(), and cbdataRealFree().

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors