From 0fa0c016bb6f0d9bf3afab8b67108b874b368302 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 24 Jan 2014 11:03:26 -0800 Subject: [PATCH] OSDMap: deepish_copy_from() Make a deep(ish) copy of another OSDMap. Unfortunatley we can't make the compiler-generated copy operator/constructors private until c++11. :( Signed-off-by: Sage Weil (cherry picked from commit bd54b9841b9255406e56cdc7269bddb419453304) --- src/osd/OSDMap.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index bd8f09b682e31..2c65078069e76 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -232,6 +232,25 @@ private: memset(&fsid, 0, sizeof(fsid)); } + // no copying + /* oh, how i long for c++11... +private: + OSDMap(const OSDMap& other) = default; + const OSDMap& operator=(const OSDMap& other) = default; +public: + */ + + void deepish_copy_from(const OSDMap& o) { + pg_temp.reset(new map >(*o.pg_temp)); + osd_uuid.reset(new vector(*o.osd_uuid)); + + // NOTE: this still references shared entity_addr_t's. + osd_addrs.reset(new addrs_s(*o.osd_addrs)); + + // NOTE: we do not copy crush. note that apply_incremental will + // allocate a new CrushWrapper, though. + } + // map info const uuid_d& get_fsid() const { return fsid; } void set_fsid(uuid_d& f) { fsid = f; } -- 2.39.5