diff --git a/include/thallium/endpoint.hpp b/include/thallium/endpoint.hpp index 1b5c87e5c3a9dcce858420772f38353d0f77c193..0e64c664bd356b2d55935dc1479fddbf9d5b1c86 100644 --- a/include/thallium/endpoint.hpp +++ b/include/thallium/endpoint.hpp @@ -40,6 +40,8 @@ private: engine* m_engine; hg_addr_t m_addr; +public: + /** * @brief Constructor. Made private since endpoint instances * can only be created using engine::lookup. @@ -47,10 +49,14 @@ private: * @param e Engine that created the endpoint. * @param addr Mercury address. */ - endpoint(engine& e, hg_addr_t addr) - : m_engine(&e), m_addr(addr) {} - -public: + endpoint(engine& e, hg_addr_t addr, bool take_ownership=true) + : m_engine(&e), m_addr(HG_ADDR_NULL) { + if(take_ownership) { + m_addr = addr; + } else { + margo_addr_dup(m_engine->m_mid, addr, &m_addr); + } + } /** * @brief Default constructor defined so that endpoints can diff --git a/include/thallium/provider_handle.hpp b/include/thallium/provider_handle.hpp index e10ef8b33166ccbf20d181be73351def9c7fac61..f9a7afb4cebfa9b689df96d27ce062ef739bec24 100644 --- a/include/thallium/provider_handle.hpp +++ b/include/thallium/provider_handle.hpp @@ -28,6 +28,16 @@ private: public: + /** + * @brief Constructor from a HG address. + * + * @param e engine. + * @param addr Address to encapsulate. + * @param provider_id provider id. + */ + provider_handle(engine& e, hg_addr_t addr, uint16_t provider_id=0, bool take_ownership=true) + : endpoint(e, addr, take_ownership), m_provider_id(provider_id) {} + /** * @brief Constructor. *