diff --git a/src/DimServices/DimServices.cxx b/src/DimServices/DimServices.cxx index b837445..e32e17b 100644 --- a/src/DimServices/DimServices.cxx +++ b/src/DimServices/DimServices.cxx @@ -104,14 +104,18 @@ void StringRpcServer::rpcHandler() alfDebugLog.info("Request received on %s : %s",mServiceName.c_str(),getString()); try { auto returnValue = mCallback(std::string(getString())); - setDataString(makeSuccessString(returnValue), *this); + auto reply = makeSuccessString(returnValue); + mDimBuffer = toCharBuffer(reply, true); // keep buffer alive + setData(mDimBuffer.data(), mDimBuffer.size()); rtrim(returnValue); alfDebugLog.info("Request completed: %s", returnValue.c_str()); } catch (const std::exception& e) { if (kDebugLogging) { Logger::get() << mServiceName << ": " << e.what() << LogErrorDevel_(5100) << endm; } - setDataString(makeFailureString(e.what()), *this); + auto reply = makeFailureString(e.what()); + mDimBuffer = toCharBuffer(reply, true); // keep buffer alive + setData(mDimBuffer.data(), mDimBuffer.size()); alfDebugLog.error("Request failure: %s", e.what()); } } diff --git a/src/DimServices/DimServices.h b/src/DimServices/DimServices.h index c179cfb..252438c 100644 --- a/src/DimServices/DimServices.h +++ b/src/DimServices/DimServices.h @@ -85,6 +85,7 @@ class StringRpcServer : public DimRpcParallel Callback mCallback; std::string mServiceName; + std::vector mDimBuffer; // owns DIM data }; // CLIENT