diff --git a/include/gz/transport/Node.hh b/include/gz/transport/Node.hh index 879e5157..f4eb284b 100644 --- a/include/gz/transport/Node.hh +++ b/include/gz/transport/Node.hh @@ -765,7 +765,7 @@ namespace gz /// \brief Get a pointer to the shared node (singleton shared by all the /// nodes). /// \return The pointer to the shared node. - private: std::shared_ptr Shared() const; + private: NodeShared *Shared() const; /// \brief Get the UUID of this node. /// \return The node UUID. diff --git a/include/gz/transport/NodeShared.hh b/include/gz/transport/NodeShared.hh index 61113731..2f087da0 100644 --- a/include/gz/transport/NodeShared.hh +++ b/include/gz/transport/NodeShared.hh @@ -285,10 +285,10 @@ namespace gz const std::string &_topic) const; /// \brief Constructor. - public: NodeShared(); + protected: NodeShared(); /// \brief Destructor. - public: virtual ~NodeShared(); + protected: virtual ~NodeShared(); /// \brief Initialize all sockets. /// \return True when success or false otherwise. This function might diff --git a/src/Node.cc b/src/Node.cc index 06c10d9f..f3d46452 100644 --- a/src/Node.cc +++ b/src/Node.cc @@ -862,9 +862,9 @@ bool Node::EnableStats(const std::string &_topic, bool _enable, } ////////////////////////////////////////////////// -std::shared_ptr Node::Shared() const +NodeShared *Node::Shared() const { - return this->dataPtr->shared; + return this->dataPtr->shared.get(); } ////////////////////////////////////////////////// diff --git a/src/NodeShared.cc b/src/NodeShared.cc index 67552b28..0ff11d45 100644 --- a/src/NodeShared.cc +++ b/src/NodeShared.cc @@ -158,11 +158,12 @@ std::shared_ptr NodeShared::Instance() // is not shared between different processes. static std::weak_ptr nodeSharedWeak; - auto nodeShared = nodeSharedWeak.lock(); + std::shared_ptr nodeShared = nodeSharedWeak.lock(); if (nodeShared) return nodeShared; - nodeShared = std::make_shared(); + class MakeSharedEnabler : public NodeShared {}; + nodeShared = std::make_shared(); nodeSharedWeak = nodeShared; return nodeShared; }