DNDSR 0.2.1
Distributed Numeric Data Structure for CFV
Loading...
Searching...
No Matches
DNDS::MPI::ResourceRecycler Class Reference

Singleton that tracks and releases long-lived MPI resources at MPI_Finalize time. More...

#include <MPI.hpp>

Public Member Functions

 ResourceRecycler (const ResourceRecycler &)=delete
 
ResourceRecycleroperator= (const ResourceRecycler &)=delete
 
 ResourceRecycler (ResourceRecycler &&)=delete
 
ResourceRecycleroperator= (ResourceRecycler &&)=delete
 
 ~ResourceRecycler ()=default
 
void RegisterCleaner (void *p, std::function< void()> nCleaner)
 Register a cleanup callback keyed by p.
 
void RemoveCleaner (void *p)
 Remove a previously-registered cleaner.
 
void clean ()
 Invoke all registered cleaners and drop them. Called by MPI::Finalize().
 

Static Public Member Functions

static ResourceRecyclerInstance ()
 Access the process-wide singleton.
 

Detailed Description

Singleton that tracks and releases long-lived MPI resources at MPI_Finalize time.

MPI communicators, derived datatypes, and persistent requests must be released before MPI_Finalize; otherwise they leak memory and MPICH prints warnings. Several DNDSR objects (MPITypePairHolder, MPIReqHolder) register themselves here so that MPI::Finalize() can call their cleanup callbacks even if the C++ lifetime would outlive the MPI runtime (e.g., static destructors).

Thread-safe C++11 singleton. Intended to be created under MPI_COMM_WORLD.

Definition at line 288 of file MPI.hpp.

Constructor & Destructor Documentation

◆ ResourceRecycler() [1/2]

DNDS::MPI::ResourceRecycler::ResourceRecycler ( const ResourceRecycler )
delete

◆ ResourceRecycler() [2/2]

DNDS::MPI::ResourceRecycler::ResourceRecycler ( ResourceRecycler &&  )
delete

◆ ~ResourceRecycler()

DNDS::MPI::ResourceRecycler::~ResourceRecycler ( )
default

Member Function Documentation

◆ clean()

void DNDS::MPI::ResourceRecycler::clean ( )

Invoke all registered cleaners and drop them. Called by MPI::Finalize().

Definition at line 327 of file MPI.cpp.

Here is the caller graph for this function:

◆ Instance()

ResourceRecycler & DNDS::MPI::ResourceRecycler::Instance ( )
static

Access the process-wide singleton.

Definition at line 309 of file MPI.cpp.

Here is the caller graph for this function:

◆ operator=() [1/2]

ResourceRecycler & DNDS::MPI::ResourceRecycler::operator= ( const ResourceRecycler )
delete

◆ operator=() [2/2]

ResourceRecycler & DNDS::MPI::ResourceRecycler::operator= ( ResourceRecycler &&  )
delete

◆ RegisterCleaner()

void DNDS::MPI::ResourceRecycler::RegisterCleaner ( void *  p,
std::function< void()>  nCleaner 
)

Register a cleanup callback keyed by p.

Warning
Must be paired with RemoveCleaner when p is destroyed, else dangling pointers will be invoked by clean.

Definition at line 315 of file MPI.cpp.

Here is the caller graph for this function:

◆ RemoveCleaner()

void DNDS::MPI::ResourceRecycler::RemoveCleaner ( void *  p)

Remove a previously-registered cleaner.

Definition at line 321 of file MPI.cpp.

Here is the caller graph for this function:

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