What: Add a library destructor function to OPAL. The new function would take care of cleaning up some of OPAL's state (closing frameworks, shutting down MCA, etc).
Why: OPAL can not currently be re-initialized. There are numerous problems throughout the project that will make it difficult (but not impossible) to get opal in a state where we can allow re-initialization. Additionally, there are probably arguments against making opal re-initable. opal not being re-initializable would not normally be a problem except that the following code sequence always crashes: MPI_T_Init_thread (); <-- Calls opal_init_util() MPI_T_Finalize (); <-- Calls opal_finalize_util() MPI_Init (); <-- SEGV This happens because MPI_T_Finalize() calls opal_finalize_util() to ensure maximum valgrind cleanness. This call causes OPAL to tear down OPAL classes (among other things) leading to the SEGV on the next call to opal_init()/opal_init_util(). There is an open ticket on this issue: https://svn.open-mpi.org/trac/ompi/ticket/4490 To fix this problem I want to add a destructor function to OPAL. This function would take on some of the current functionality of opal_finalize_util(). This would solve the above issue without having to update OPAL to allow re-initialization. For those not familiar with destructor functions. They are always called at the end of execution or when the library is closed (dl_close). Multiple destructors functions can be defined. Marking a function as a destructor is simple: void __attribute__((destructor)) foo (void); When: Setting a timeout for next Friday (July 25). -Nathan
pgppgmk84dSA7.pgp
Description: PGP signature