XRootD
XrdEc::BufferPool Class Reference

Pool of buffer for caching writes. More...

#include <XrdEcWrtBuff.hh>

+ Collaboration diagram for XrdEc::BufferPool:

Public Member Functions

XrdCl::Buffer Create (const ObjCfg &objcfg)
 Create now buffer (or recycle existing one) More...
 
void Recycle (XrdCl::Buffer &&buffer)
 Give back a buffer to the poool. More...
 

Static Public Member Functions

static BufferPoolInstance ()
 Singleton access to the object. More...
 

Detailed Description

Pool of buffer for caching writes.

Definition at line 48 of file XrdEcWrtBuff.hh.

Member Function Documentation

◆ Create()

XrdCl::Buffer XrdEc::BufferPool::Create ( const ObjCfg objcfg)
inline

Create now buffer (or recycle existing one)

Definition at line 64 of file XrdEcWrtBuff.hh.

65  {
66  std::unique_lock<std::mutex> lck( mtx );
67  //---------------------------------------------------------------------
68  // If pool is not empty, recycle existing buffer
69  //---------------------------------------------------------------------
70  if( !pool.empty() )
71  {
72  XrdCl::Buffer buffer( std::move( pool.front() ) );
73  pool.pop();
74  return buffer;
75  }
76  //---------------------------------------------------------------------
77  // Check if we can create a new buffer object without exceeding the
78  // the maximum size of the pool
79  //---------------------------------------------------------------------
80  if( currentsize < totalsize )
81  {
82  XrdCl::Buffer buffer( objcfg.blksize );
83  ++currentsize;
84  return buffer;
85  }
86  //---------------------------------------------------------------------
87  // If not, we have to wait until there is a buffer we can recycle
88  //---------------------------------------------------------------------
89  while( pool.empty() ) cv.wait( lck );
90  XrdCl::Buffer buffer( std::move( pool.front() ) );
91  pool.pop();
92  return buffer;
93  }
Binary blob representation.
Definition: XrdClBuffer.hh:34

References XrdEc::ObjCfg::blksize.

◆ Instance()

static BufferPool& XrdEc::BufferPool::Instance ( )
inlinestatic

Singleton access to the object.

Definition at line 55 of file XrdEcWrtBuff.hh.

56  {
57  static BufferPool instance;
58  return instance;
59  }

Referenced by XrdEc::WrtBuff::~WrtBuff().

+ Here is the caller graph for this function:

◆ Recycle()

void XrdEc::BufferPool::Recycle ( XrdCl::Buffer &&  buffer)
inline

Give back a buffer to the poool.

Definition at line 98 of file XrdEcWrtBuff.hh.

99  {
100  if( !buffer.GetBuffer() ) return;
101  std::unique_lock<std::mutex> lck( mtx );
102  buffer.SetCursor( 0 );
103  pool.emplace( std::move( buffer ) );
104  cv.notify_all();
105  }
const char * GetBuffer(uint32_t offset=0) const
Get the message buffer.
Definition: XrdClBuffer.hh:72
void SetCursor(uint32_t cursor)
Set the cursor.
Definition: XrdClBuffer.hh:148

Referenced by XrdEc::WrtBuff::~WrtBuff().

+ Here is the caller graph for this function:

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