Salome HOME
Squeeze memory of process hosting YACS graph
[modules/yacs.git] / src / engine / AnyInputPort.cxx
index 2c914bbe1cf2d8648e798c7f0942f33cbfd913e1..6fa9acba5c4421045ae954807b21f557a87043dc 100644 (file)
@@ -84,16 +84,29 @@ void AnyInputPort::exRestoreInit()
   _value->incrRef();
 }
 
-void AnyInputPort::put(Any *data)
+void AnyInputPort::releaseDataUnsafe()
 {
-  YACS::BASES::AutoLocker<YACS::BASES::Mutex> lock(&_mutex);
   if(_value)
     _value->decrRef();
+  _value = nullptr;
+}
+
+void AnyInputPort::releaseData()
+{
+  YACS::BASES::AutoLocker<YACS::BASES::Mutex> lock(&_mutex);
+  releaseDataUnsafe();
+}
+
+void AnyInputPort::put(Any *data)
+{
+  YACS::BASES::AutoLocker<YACS::BASES::Mutex> lock(&_mutex);
+  releaseDataUnsafe();
   _value=data;
-  if (_value) {
-    _value->incrRef();
-    DEBTRACE("value ref count: " << _value->getRefCnt());
-  }
+  if (_value)
+    {
+      _value->incrRef();
+      DEBTRACE("value ref count: " << _value->getRefCnt());
+    }
 }
 
 bool AnyInputPort::isEmpty()