diff --git a/include/openPMD/IO/IOTask.hpp b/include/openPMD/IO/IOTask.hpp index 8ded6f1775..f32fc36785 100644 --- a/include/openPMD/IO/IOTask.hpp +++ b/include/openPMD/IO/IOTask.hpp @@ -30,6 +30,7 @@ #include "openPMD/backend/Attribute.hpp" #include "openPMD/backend/ParsePreference.hpp" +#include #include #include #include @@ -680,15 +681,23 @@ template <> struct OPENPMDAPI_EXPORT Parameter : public AbstractParameter { - Parameter() = default; - Parameter(Parameter const &) : AbstractParameter() + Parameter(void const *ptr_in) : former_parent(ptr_in) {} + Parameter(Parameter const &) = default; + Parameter(Parameter &&) = default; + + Parameter &operator=(Parameter const &) = default; + Parameter &operator=(Parameter &&) = default; + std::unique_ptr to_heap() && override { return std::make_unique>( std::move(*this)); } + + // Just for verbose logging. + void const *former_parent = nullptr; }; /** @brief Self-contained description of a single IO operation. diff --git a/src/IO/AbstractIOHandlerImpl.cpp b/src/IO/AbstractIOHandlerImpl.cpp index 90e0e4a9be..edacb0e402 100644 --- a/src/IO/AbstractIOHandlerImpl.cpp +++ b/src/IO/AbstractIOHandlerImpl.cpp @@ -358,7 +358,11 @@ std::future AbstractIOHandlerImpl::flush() auto ¶meter = deref_dynamic_cast>( i.parameter.get()); writeToStderr( - "[", i.writable->parent, "->", i.writable, "] DEREGISTER"); + "[", + parameter.former_parent, + "->", + i.writable, + "] DEREGISTER"); deregister(i.writable, parameter); break; } diff --git a/src/backend/Writable.cpp b/src/backend/Writable.cpp index 97d13ce5f0..1762a4cefb 100644 --- a/src/backend/Writable.cpp +++ b/src/backend/Writable.cpp @@ -39,7 +39,7 @@ Writable::~Writable() * remove references to this object from internal data structures. */ IOHandler->value()->enqueue( - IOTask(this, Parameter())); + IOTask(this, Parameter(parent))); } void Writable::seriesFlush(std::string backendConfig)