diff --git a/src/pio_server.c b/src/pio_server.c index 6337f20382ed4af1a93facd43298c2c6ff103801..6ede080c58bb59726bb9edecdbe6214fd8a80746 100644 --- a/src/pio_server.c +++ b/src/pio_server.c @@ -175,6 +175,7 @@ createClientStreamBuf(size_t streamIdx, const struct clientBufSize *bufSizes, const struct cdiPioConf *conf) { + /* find and tabulate aggregate size needed for all clients of collector */ size_t streamBufferSize = 0; for (size_t i = 0; i < (size_t)numClients_; ++i) { @@ -183,6 +184,7 @@ createClientStreamBuf(size_t streamIdx, rxWin[streamIdx].clientBuf[i].dictSize = bufSizes[i].numDataRecords + bufSizes[i].numRPCRecords; } + /* set pointer to RMA buffer for client 0 of collector */ if (conf->batchedRMA) rxWin[streamIdx].clientBuf[0].mem = Malloc(streamBufferSize); else @@ -198,20 +200,26 @@ createClientStreamBuf(size_t streamIdx, for (size_t j = 0; j < numStreams; ++j) if (rxWin[j].getWin != MPI_WIN_NULL) { - rxWin[j].clientBuf[0].mem = sharedClientBuf; - for (size_t i = 1; i < (size_t)numClients_; ++i) - rxWin[j].clientBuf[i].mem - = rxWin[j].clientBuf[i-1].mem - + rxWin[j].clientBuf[i-1].size; + unsigned char *newmem = sharedClientBuf; + for (size_t i = 0; i < (size_t)numClients_; ++i) + { + rxWin[j].clientBuf[i].mem = newmem; + newmem += rxWin[j].clientBuf[i].size; + } } } } rxWin[streamIdx].clientBuf[0].mem = sharedClientBuf; } - for (size_t i = 1; i < (size_t)numClients_; ++i) - rxWin[streamIdx].clientBuf[i].mem - = rxWin[streamIdx].clientBuf[i-1].mem - + rxWin[streamIdx].clientBuf[i-1].size; + /* set pointers for other clients */ + { + unsigned char *newmem = rxWin[streamIdx].clientBuf[0].mem; + for (size_t i = 1; i < (size_t)numClients_; ++i) + { + newmem += rxWin[streamIdx].clientBuf[i-1].size; + rxWin[streamIdx].clientBuf[i].mem = newmem; + } + } }