From 246f9e2b1fcdb304e50961ab632bf2c594e3329a Mon Sep 17 00:00:00 2001 From: Owen Green Date: Mon, 11 Jan 2021 17:00:45 +0000 Subject: [PATCH] Ensure that threaded jobs still have a completion message to send (broken by 6065996) --- include/wrapper/NonRealtime.hpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/include/wrapper/NonRealtime.hpp b/include/wrapper/NonRealtime.hpp index 254f19b..db77f09 100644 --- a/include/wrapper/NonRealtime.hpp +++ b/include/wrapper/NonRealtime.hpp @@ -345,6 +345,7 @@ namespace impl { void* space = ft->fRTAlloc(world,sizeof(CommandAsyncComplete)); CommandAsyncComplete* cmd = new (space) CommandAsyncComplete(world, id,c->mReplyAddress); runAsyncCommand(world, cmd, c->mReplyAddress, c->mCompletionMsgSize, c->mCompletionMessage); + if(c->mCompletionMsgSize) ft->fRTFree(world,c->mCompletionMessage); }; auto tidyup = [](FifoMsg* msg) @@ -622,7 +623,10 @@ namespace impl { { if(!cmd->synchronous()) { - cmd->addCompletionMessage(completionMsgSize,completionMsgData); + + auto msgcopy = (char*)getInterfaceTable()->fRTAlloc(world,completionMsgSize); + memcpy(msgcopy, completionMsgData, completionMsgSize); + cmd->addCompletionMessage(completionMsgSize,msgcopy); return runAsyncCommand(world, cmd, replyAddr, 0, nullptr); } else return runAsyncCommand(world, cmd, replyAddr, completionMsgSize, completionMsgData); @@ -633,7 +637,9 @@ namespace impl { { if(!cmd->synchronous()) { - cmd->addCompletionMessage(completionMsgSize,completionMsgData); + auto msgcopy = (char*)getInterfaceTable()->fRTAlloc(world,completionMsgSize); + memcpy(msgcopy, completionMsgData, completionMsgSize); + cmd->addCompletionMessage(completionMsgSize,msgcopy); return runAsyncCommand(world, cmd, replyAddr, 0, nullptr); } else return runAsyncCommand(world, cmd, replyAddr, completionMsgSize, completionMsgData);