Skip to content
Snippets Groups Projects
Commit 4bd56c3c authored by Thomas Jahns's avatar Thomas Jahns :cartwheel: Committed by Sergey Kosukhin
Browse files

Attach write mode cleanup to namespace.

* This will permit multiple parallel modes concurrently.
parent e96a1a5c
No related branches found
No related tags found
2 merge requests!34Version 2.2.0,!13Consolidation with CDI-PIO (develop)
......@@ -10,6 +10,8 @@
const char *const cdiPioCmdStrTab[]
= { "IO_Open_file", "IO_Close_file", "IO_Get_fp", "IO_Set_fp", "IO_Send_buffer", "IO_Finalize" };
int cdiPioExtraNSKeys[cdiPioExtraNSKeysSize];
/*
* Local Variables:
* c-file-style: "Java"
......
#ifndef _PIO_H
#define _PIO_H
#ifndef CDI_PIO_H
#define CDI_PIO_H
#ifdef HAVE_CONFIG_H
#include "config.h"
......@@ -8,7 +8,15 @@
#include <stdlib.h>
#include <mpi.h>
extern void (*cdiPioFileWritingFinalize)(void);
/* indices of extra keys put into cdiPioExtraNSKeys */
enum
{
cdiPioEKFileWritingFinalize,
cdiPioExtraNSKeysSize
};
extern int cdiPioExtraNSKeys[cdiPioExtraNSKeysSize];
#endif
/*
......
......@@ -439,17 +439,20 @@ cdiPioInit(MPI_Comm commGlob, int confResH, int *pioNamespace)
reshRemove(confResH, &cdiPioConfOps);
if (commInqIsProcIO())
{
int serverNamespace = namespaceNew();
cdiPioSerializeSetMPI();
conf->postCommSetupActions();
cdiPioFileWritingInit(conf);
if (commInqRankColl() >= 0)
{
cdiPioCollectorMessageLoop(conf);
void (*cdiPioFileWritingFinalize)(void) = namespaceSwitchGet(cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize]).func;
cdiPioFileWritingFinalize();
}
cdiPioCommFinalize();
if (xtInitByCDI) xt_finalize();
reshReplace(confResH, conf, &cdiPioConfOps);
namespaceDelete(serverNamespace);
return MPI_COMM_NULL;
}
else
......@@ -460,9 +463,21 @@ cdiPioInit(MPI_Comm commGlob, int confResH, int *pioNamespace)
return commInqCommModel();
}
static void
cdiPioFileWritingFinalizeDefault(void)
{
xabort("error: failed to setup file writing finalization function!");
}
static void
cdiPioFileWritingInit(const struct cdiPioConf *conf)
{
if (cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize] == 0)
{
cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize] = cdiNamespaceSwitchNewKey();
}
namespaceSwitchSet(cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize], NSSW_FUNC(cdiPioFileWritingFinalizeDefault));
int IOMode = commInqIOMode();
xassert(IOMode != PIO_NONE || commInqSizeGlob() == 1);
......@@ -482,14 +497,6 @@ cdiPioFileWritingInit(const struct cdiPioConf *conf)
}
}
static void
cdiPioFileWritingFinalizeDefault(void)
{
xabort("error: failed to setup file writing finalization function!");
}
void (*cdiPioFileWritingFinalize)(void) = cdiPioFileWritingFinalizeDefault;
/*****************************************************************************/
void
......
......@@ -198,7 +198,7 @@ cdiPioFileWriteAtAllInit(void)
namespaceSwitchSet(NSSWITCH_FILE_OPEN, NSSW_FUNC(fowFileWriteAtAll));
namespaceSwitchSet(NSSWITCH_FILE_CLOSE, NSSW_FUNC(fcFileWriteAtAll));
namespaceSwitchSet(NSSWITCH_FILE_WRITE, NSSW_FUNC(fwFileWriteAtAll));
cdiPioFileWritingFinalize = finalizeFileWriteAtAll;
namespaceSwitchSet(cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize], NSSW_FUNC(finalizeFileWriteAtAll));
if (bibAFiledataM == NULL) xabort("listSetNew did not succeed");
}
......
......@@ -504,7 +504,7 @@ cdiPioFileWriteAtReblockInit(const struct cdiPioConf *conf)
namespaceSwitchSet(NSSWITCH_FILE_OPEN, NSSW_FUNC(fowFileWriteAtReblock));
namespaceSwitchSet(NSSWITCH_FILE_CLOSE, NSSW_FUNC(fcFileWriteAtReblock));
namespaceSwitchSet(NSSWITCH_FILE_WRITE, NSSW_FUNC(fwFileWriteAtReblock));
cdiPioFileWritingFinalize = finalizeFileWriteAtReblock;
namespaceSwitchSet(cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize], NSSW_FUNC(finalizeFileWriteAtReblock));
largePageAlign = conf->largePageAlign;
......
......@@ -184,7 +184,7 @@ cdiPioFileWriteOrderedInit(void)
namespaceSwitchSet(NSSWITCH_FILE_OPEN, NSSW_FUNC(fowFileWriteOrdered));
namespaceSwitchSet(NSSWITCH_FILE_CLOSE, NSSW_FUNC(fcFileWriteOrdered));
namespaceSwitchSet(NSSWITCH_FILE_WRITE, NSSW_FUNC(fwFileWriteOrdered));
cdiPioFileWritingFinalize = finalizeFileWriteOrdered;
namespaceSwitchSet(cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize], NSSW_FUNC(finalizeFileWriteOrdered));
if (bibAFiledataM == NULL) xabort("listSetNew did not succeed");
}
......
......@@ -296,7 +296,7 @@ initMPINONB(void)
namespaceSwitchSet(NSSWITCH_FILE_OPEN, NSSW_FUNC(fowMPINONB));
namespaceSwitchSet(NSSWITCH_FILE_CLOSE, NSSW_FUNC(fcMPINONB));
namespaceSwitchSet(NSSWITCH_FILE_WRITE, NSSW_FUNC(fwMPINONB));
cdiPioFileWritingFinalize = finalizeMPINONB;
namespaceSwitchSet(cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize], NSSW_FUNC(finalizeMPINONB));
if (bibAFiledataM == NULL) xabort("listSetNew did not succeed");
}
......
......@@ -492,7 +492,7 @@ initPOSIXFPGUARDSENDRECV(void)
namespaceSwitchSet(NSSWITCH_FILE_OPEN, NSSW_FUNC(fowPOSIXFPGUARDSENDRECV));
namespaceSwitchSet(NSSWITCH_FILE_CLOSE, NSSW_FUNC(fcPOSIXFPGUARDSENDRECV));
namespaceSwitchSet(NSSWITCH_FILE_WRITE, NSSW_FUNC(fwPOSIXFPGUARDSENDRECV));
cdiPioFileWritingFinalize = finalizePOSIXFPGUARDSENDRECV;
namespaceSwitchSet(cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize], NSSW_FUNC(finalizePOSIXFPGUARDSENDRECV));
bibAFiledataPF = listSetNew(destroyAFiledataPF, compareNamesAPF);
}
}
......
......@@ -296,7 +296,7 @@ pioSendInitialize(void)
namespaceSwitchSet(NSSWITCH_FILE_OPEN, NSSW_FUNC(pioSendOpen));
namespaceSwitchSet(NSSWITCH_FILE_CLOSE, NSSW_FUNC(pioSendClose));
namespaceSwitchSet(NSSWITCH_FILE_WRITE, NSSW_FUNC(pioSendWrite));
cdiPioFileWritingFinalize = pioSendFinalize;
namespaceSwitchSet(cdiPioExtraNSKeys[cdiPioEKFileWritingFinalize], NSSW_FUNC(pioSendFinalize));
bibRemoteFileBuf = listSetNew(destroyRemoteFileBuf, compareNames);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment