Actual source code: dlregisthreadcomm.c

petsc-3.3-p5 2012-12-01
  1: #include <petsc-private/threadcommimpl.h>

  3: static PetscBool PetscThreadCommPackageInitialized = PETSC_FALSE;

  7: /*@C
  8:    PetscThreadCommFinalizePackage - Finalize PetscThreadComm package, called from PetscFinalize()

 10:    Logically collective

 12:    Level: developer

 14: .seealso: PetscThreadCommInitializePackage()
 15: @*/
 16: PetscErrorCode PetscThreadCommFinalizePackage(void)
 17: {
 19:   MPI_Comm comm;

 22:   PetscThreadCommRegisterDestroy();

 24:   comm = PETSC_COMM_WORLD;      /* Release double-reference from PetscThreadCommInitialize */
 25:   PetscCommDestroy(&comm);

 27:   comm = PETSC_COMM_SELF;       /* Release double-reference from PetscThreadCommInitialize */
 28:   PetscCommDestroy(&comm);

 30:   MPI_Keyval_free(&Petsc_ThreadComm_keyval);
 31:   PetscThreadCommPackageInitialized = PETSC_FALSE;
 32:   return(0);
 33: }

 37: /*@C
 38:    PetscThreadCommInitializePackage - Initializes ThreadComm package

 40:    Logically collective

 42:    Input Parameter:
 43: .  path - The dynamic library path, or PETSC_NULL

 45:    Level: developer

 47: .seealso: PetscThreadCommFinalizePackage()
 48: @*/
 49: PetscErrorCode PetscThreadCommInitializePackage(const char *path)
 50: {

 54:   if(PetscThreadCommPackageInitialized) return(0);
 55:   PetscThreadCommInitialize();
 56:   PetscThreadCommPackageInitialized = PETSC_TRUE;
 57:   PetscRegisterFinalize(PetscThreadCommFinalizePackage);
 58:   return(0);
 59: }