GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4BufferQueue Class Reference

Class containing a pointer queue for TBuffers. More...

#include <TGo4BufferQueue.h>

+ Inheritance diagram for TGo4BufferQueue:

Public Member Functions

 TGo4BufferQueue ()
 
 TGo4BufferQueue (const char *name)
 
virtual ~TGo4BufferQueue ()
 
void AddBuffer (TBuffer *buffer, Bool_t clone=kFALSE)
 Add buffer pointer to queue.
 
void AddBufferFromObject (TObject *object)
 Reconstruct a TObject queue entry from a given TBuffer pointer.
 
void Clear (Option_t *opt="") override
 Empty the queue and give free buffers back.
 
void FreeBuffer (TBuffer *buffer)
 Free internal buffer to be re-used by the AddBuffer as clone method.
 
TBuffer * WaitBuffer ()
 Wait for buffer object from queue.
 
TObject * WaitObjectFromBuffer ()
 Wait for buffer object from queue.
 
- Public Member Functions inherited from TGo4Queue
 TGo4Queue (const char *name=nullptr)
 
virtual ~TGo4Queue ()
 
void Clear (Option_t *opt="") override
 
Int_t GetEntries () const
 
Bool_t IsEmpty () const
 
void SetMaxEntries (Int_t max)
 
virtual void Wake ()
 

Static Public Member Functions

static TBuffer * CreateValueBuffer (UInt_t val)
 Create a root buffer that contains a single value val.
 
static Int_t DecodeValueBuffer (TBuffer *buf)
 Extract value from buffer that was created by CreateValueBuffer method.
 

Private Member Functions

void InitBuffers ()
 Initialization of internal queue buffer.
 
TBuffer * NewEntry ()
 Create dummy buffer for queue.
 
void Realloc (TBuffer *buffer, Int_t oldsize, Int_t newsize)
 Reallocate buffer of TBuffer to newsize.
 

Private Attributes

Int_t fiMaxBuffers {0}
 Number of preallocated buffer TBuffers (maximum entries in fxBufferList).
 
TList * fxBufferList {nullptr}
 List of preallocated buffer TBuffers which are used when TBuffer added to queue should be "cloned".
 
TMutex * fxBufferMutex {nullptr}
 
TList * fxFreeList {nullptr}
 List of buffers which are free for the next add.
 

Additional Inherited Members

- Protected Member Functions inherited from TGo4Queue
void Add (TObject *ob)
 
TObject * Next ()
 
TObject * Wait ()
 

Detailed Description

Class containing a pointer queue for TBuffers.

Is able to stream any external TObject into a TBuffer which then is added to the queue.

Definition at line 26 of file TGo4BufferQueue.h.

Constructor & Destructor Documentation

◆ TGo4BufferQueue() [1/2]

TGo4BufferQueue::TGo4BufferQueue ( )

◆ TGo4BufferQueue() [2/2]

TGo4BufferQueue::TGo4BufferQueue ( const char * name)

◆ ~TGo4BufferQueue()

TGo4BufferQueue::~TGo4BufferQueue ( )
virtual

Definition at line 68 of file TGo4BufferQueue.cxx.

References fxBufferList, fxBufferMutex, fxFreeList, and GO4TRACE.

Member Function Documentation

◆ AddBuffer()

void TGo4BufferQueue::AddBuffer ( TBuffer * buffer,
Bool_t clone = kFALSE )

Add buffer pointer to queue.

We Renamed the protected baseclass method to avoid user confusion. If clone is true, a clone (deep streamer copy) of the given buffer will be done and this clone is added to the queue.

Definition at line 127 of file TGo4BufferQueue.cxx.

References TGo4Queue::Add(), TGo4Log::Debug(), fiMaxBuffers, fxBufferList, fxBufferMutex, fxFreeList, GO4TRACE, NewEntry(), Realloc(), and TGo4LockGuard.

Referenced by main(), TGo4ServerTask::SendStatusBuffer(), TGo4Task::SendStatusBuffer(), TGo4Task::SendStopBuffers(), TGo4Task::SubmitEmergencyCommand(), and TGo4Task::SubmitEmergencyData().

◆ AddBufferFromObject()

void TGo4BufferQueue::AddBufferFromObject ( TObject * object)

Reconstruct a TObject queue entry from a given TBuffer pointer.

To be used for streaming the receiving socket contents into the queue. Operation should be thread locked by the calling user.

Definition at line 194 of file TGo4BufferQueue.cxx.

References TGo4Queue::Add(), GO4TRACE, and TGo4LockGuard.

Referenced by TGo4Task::GetStatus(), main(), TGo4Task::SendObject(), TGo4Task::SendStatus(), TGo4ExampleServer::StopWorkThreads(), and TGo4Task::SubmitCommand().

◆ Clear()

void TGo4BufferQueue::Clear ( Option_t * opt = "")
override

Empty the queue and give free buffers back.

Definition at line 258 of file TGo4BufferQueue.cxx.

References FreeBuffer(), and TGo4Queue::Next().

Referenced by TGo4AnalysisProxy::ReceiveStatus().

◆ CreateValueBuffer()

TBuffer * TGo4BufferQueue::CreateValueBuffer ( UInt_t val)
static

Create a root buffer that contains a single value val.

This feature is used to wrap direct (emergency) commands into a TBuffer to send it via the taskhandler queues and sockets. Also used to indicate disconnect mode for the taskhandler threads.

Definition at line 285 of file TGo4BufferQueue.cxx.

Referenced by TGo4Task::TGo4Task(), TGo4Task::SubmitEmergencyCommand(), and TGo4Task::SubmitEmergencyData().

◆ DecodeValueBuffer()

Int_t TGo4BufferQueue::DecodeValueBuffer ( TBuffer * buf)
static

Extract value from buffer that was created by CreateValueBuffer method.

Used to decode a direct command or disconnect value that is received from queue or socket connection. Negative value means no valid value buffer.

Definition at line 296 of file TGo4BufferQueue.cxx.

Referenced by TGo4TaskHandlerRunnable::CheckStopBuffer().

◆ FreeBuffer()

void TGo4BufferQueue::FreeBuffer ( TBuffer * buffer)

Free internal buffer to be re-used by the AddBuffer as clone method.

To be used by the thread that got the buffer from WaitBuffer after working on it. If buffer does not belong to the internal buffers list of this queue, it is not added to the free buffer list.

Definition at line 238 of file TGo4BufferQueue.cxx.

References TGo4Socket::fgiBUFINITSIZE, fxBufferList, fxBufferMutex, fxFreeList, GO4TRACE, Realloc(), and TGo4LockGuard.

Referenced by Clear(), and WaitObjectFromBuffer().

◆ InitBuffers()

void TGo4BufferQueue::InitBuffers ( )
private

Initialization of internal queue buffer.

Definition at line 52 of file TGo4BufferQueue.cxx.

References fiMaxBuffers, fxBufferList, fxBufferMutex, fxFreeList, GO4TRACE, NewEntry(), and TGo4LockGuard.

Referenced by TGo4BufferQueue(), and TGo4BufferQueue().

◆ NewEntry()

TBuffer * TGo4BufferQueue::NewEntry ( )
private

Create dummy buffer for queue.

Definition at line 272 of file TGo4BufferQueue.cxx.

References TGo4Socket::fgiBUFINITSIZE, and TGo4LockGuard.

Referenced by AddBuffer(), and InitBuffers().

◆ Realloc()

void TGo4BufferQueue::Realloc ( TBuffer * buffer,
Int_t oldsize,
Int_t newsize )
private

Reallocate buffer of TBuffer to newsize.

Definition at line 264 of file TGo4BufferQueue.cxx.

References TGo4LockGuard.

Referenced by AddBuffer(), and FreeBuffer().

◆ WaitBuffer()

TBuffer * TGo4BufferQueue::WaitBuffer ( )

Wait for buffer object from queue.

We Renamed the protected baseclass method to avoid user confusion.

Definition at line 85 of file TGo4BufferQueue.cxx.

References GO4TRACE, and TGo4Queue::Wait().

Referenced by main(), and WaitObjectFromBuffer().

◆ WaitObjectFromBuffer()

TObject * TGo4BufferQueue::WaitObjectFromBuffer ( )

Wait for buffer object from queue.

When buffer is received, object is reconstructed out of it (thread mainlock acquired!). nullptr in case of unknown class.

Definition at line 92 of file TGo4BufferQueue.cxx.

References FreeBuffer(), GO4TRACE, TGo4LockGuard, and WaitBuffer().

Referenced by TGo4ServerTask::NextCommand(), TGo4Task::NextCommand(), TGo4Task::NextObject(), and TGo4Task::NextStatus().

Field Documentation

◆ fiMaxBuffers

Int_t TGo4BufferQueue::fiMaxBuffers {0}
private

Number of preallocated buffer TBuffers (maximum entries in fxBufferList).

Definition at line 130 of file TGo4BufferQueue.h.

Referenced by TGo4BufferQueue(), TGo4BufferQueue(), AddBuffer(), and InitBuffers().

◆ fxBufferList

TList* TGo4BufferQueue::fxBufferList {nullptr}
private

List of preallocated buffer TBuffers which are used when TBuffer added to queue should be "cloned".

Each AddBuffer with option clone will memcpy the input buffer char field to the next TBuffer field in this list. Output buffer after WaitBuffer is then this internal TBuffer, not the input TBuffer. If all buffer buffers are in use, no further buffer is allowed to be added as clone.

Definition at line 120 of file TGo4BufferQueue.h.

Referenced by TGo4BufferQueue(), TGo4BufferQueue(), ~TGo4BufferQueue(), AddBuffer(), FreeBuffer(), and InitBuffers().

◆ fxBufferMutex

TMutex* TGo4BufferQueue::fxBufferMutex {nullptr}
private

◆ fxFreeList

TList* TGo4BufferQueue::fxFreeList {nullptr}
private

List of buffers which are free for the next add.

Definition at line 123 of file TGo4BufferQueue.h.

Referenced by TGo4BufferQueue(), TGo4BufferQueue(), ~TGo4BufferQueue(), AddBuffer(), FreeBuffer(), and InitBuffers().


The documentation for this class was generated from the following files: