From 368852f6c0a884b8fdc80a5cd6f9ab72e814d412 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 24 Jan 2014 11:04:37 -0800 Subject: [PATCH] OSDMap: fix damaging input osdmap from remove_down_temps The default copy constructor copies shared_ptrs do vectors that are then modified by apply_incremental, which means that the const osdmap argument isn't in fact const. Fix this by doing a deep(ish) copy. Fixes: #7060 Signed-off-by: Sage Weil --- src/osd/OSDMap.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index e09e3de4f7b3f..9032390b041f8 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1073,7 +1073,8 @@ void OSDMap::remove_down_temps(CephContext *cct, const OSDMap& osdmap, Incremental *pending_inc) { ldout(cct, 10) << "remove_down_pg_temp" << dendl; - OSDMap tmpmap(osdmap); + OSDMap tmpmap; + tmpmap.deepish_copy_from(osdmap); tmpmap.apply_incremental(*pending_inc); for (map >::iterator p = tmpmap.pg_temp->begin(); -- 2.39.5