GAPI: fix GCall misuse in unrollExpr

pull/13639/head
Andrey Golubev 6 years ago
parent 7e2ebecd52
commit c8a89134a7
  1. 7
      modules/gapi/src/api/gcall.cpp
  2. 2
      modules/gapi/src/compiler/gmodelbuilder.cpp

@ -28,9 +28,14 @@ cv::GCall::GCall(const cv::GKernel &k)
cv::GCall::~GCall() cv::GCall::~GCall()
{ {
// FIXME: current behavior of the destructor can cause troubles in a threaded environment. GCall
// is not supposed to be accessed for modification within multiple threads. There should be a
// way to ensure somehow that no problem occurs in future. For now, this is a reminder that
// GCall is not supposed to be copied inside a code block that is executed in parallel.
// When a GCall object is destroyed (and GCall::Priv is likely still alive, // When a GCall object is destroyed (and GCall::Priv is likely still alive,
// as there might be other references), reset m_node to break cycle. // as there might be other references), reset m_node to break cycle.
m_priv->m_node = GNode(); m_priv->m_node = GNode();
} }
void cv::GCall::setArgs(std::vector<GArg> &&args) void cv::GCall::setArgs(std::vector<GArg> &&args)

@ -128,7 +128,7 @@ cv::gimpl::Unrolled cv::gimpl::unrollExpr(const GProtoArgs &ins,
// then add its operands to stack to continue recursion. // then add its operands to stack to continue recursion.
ops.visit(&node.priv(), node); ops.visit(&node.priv(), node);
const cv::GCall call = origin.node.call(); const cv::GCall& call = origin.node.call();
const cv::GCall::Priv& call_p = call.priv(); const cv::GCall::Priv& call_p = call.priv();
// Put the outputs object description of the node // Put the outputs object description of the node

Loading…
Cancel
Save