]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdmap: do no dereference NULL entity_addr_t pointer in addr accessors
authorSage Weil <sage@newdream.net>
Mon, 30 Apr 2012 20:36:37 +0000 (13:36 -0700)
committerSage Weil <sage@newdream.net>
Mon, 30 Apr 2012 20:37:55 +0000 (13:37 -0700)
These may be NULL if we expand the addr vectors but haven't ever stored an
address yet.  Check for NULL and return a reference to a blank
entity_addr_t as needed.

Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/OSDMap.h

index c7d1aba6729ba80408b462d8aff47115429bab75..f76f22d6db320ba2827e5effa831d037614687d0 100644 (file)
@@ -160,6 +160,7 @@ private:
     vector<std::tr1::shared_ptr<entity_addr_t> > client_addr;
     vector<std::tr1::shared_ptr<entity_addr_t> > cluster_addr;
     vector<std::tr1::shared_ptr<entity_addr_t> > hb_addr;
+    entity_addr_t blank;
   };
   std::tr1::shared_ptr<addrs_s> osd_addrs;
 
@@ -300,17 +301,17 @@ private:
   }
   const entity_addr_t &get_addr(int osd) const {
     assert(exists(osd));
-    return *osd_addrs->client_addr[osd];
+    return osd_addrs->client_addr[osd] ? *osd_addrs->client_addr[osd] : osd_addrs->blank;
   }
   const entity_addr_t &get_cluster_addr(int osd) const {
     assert(exists(osd));
-    if (*osd_addrs->cluster_addr[osd] == entity_addr_t())
+    if (!osd_addrs->cluster_addr[osd] || *osd_addrs->cluster_addr[osd] == entity_addr_t())
       return get_addr(osd);
     return *osd_addrs->cluster_addr[osd];
   }
   const entity_addr_t &get_hb_addr(int osd) const {
     assert(exists(osd));
-    return *osd_addrs->hb_addr[osd];
+    return osd_addrs->hb_addr[osd] ? *osd_addrs->hb_addr[osd] : osd_addrs->blank;
   }
   entity_inst_t get_inst(int osd) const {
     assert(is_up(osd));