Salome HOME
Merge branch 'V9_9_BR'
[modules/yacs.git] / src / engine / AnyInputPort.cxx
index bf0fed1d9c8d79a14870603834a0df0955cba78e..f4df76fbed879b9ad68990429eda9ca00fe91519 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2015  CEA/DEN, EDF R&D
+// Copyright (C) 2006-2022  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -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()
@@ -112,7 +125,7 @@ std::string AnyInputPort::getAsString()
   return getRuntime()->convertNeutralAsString(edGetType(),_value);
 }
 
-void AnyInputPort::put(const void *data) throw(ConversionException)
+void AnyInputPort::put(const void *data)
 {
   put((Any *)data);
 }