From 130b8b3fe8d894f278c751689f6fde67cef85430 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Mon, 6 Dec 2010 10:28:20 -0800 Subject: [PATCH] librados: fix C interface error handling in init code --- src/librados.cc | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/librados.cc b/src/librados.cc index bcc7fb67bad04..28588a2d708af 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -81,7 +81,7 @@ public: } ~RadosClient(); - bool init(); + int init(); void shutdown(); struct PoolCtx { @@ -334,23 +334,25 @@ public: } }; -bool RadosClient::init() +int RadosClient::init() { // get monmap - if (monclient.build_initial_monmap() < 0) - return false; + int ret = monclient.build_initial_monmap(); + if (ret < 0) + return ret; + + assert_warn(messenger); + if (!messenger) + return -ENOMEM; dout(1) << "starting msgr at " << messenger->get_ms_addr() << dendl; messenger->register_entity(entity_name_t::CLIENT(-1)); - assert_warn(messenger); - if (!messenger) - return false; dout(1) << "starting objecter" << dendl; objecter = new Objecter(messenger, &monclient, &osdmap, lock, timer); if (!objecter) - return false; + return -ENOMEM; objecter->set_balanced_budget(); monclient.set_messenger(messenger); @@ -362,13 +364,13 @@ bool RadosClient::init() dout(1) << "setting wanted keys" << dendl; monclient.set_want_keys(CEPH_ENTITY_TYPE_MON | CEPH_ENTITY_TYPE_OSD); - dout(1) << "iit" << dendl; + dout(1) << "calling monclient init" << dendl; monclient.init(); int err = monclient.authenticate(g_conf.client_mount_timeout); if (err) { dout(0) << *g_conf.entity_name << " authentication error " << strerror(-err) << dendl; - return false; + return err; } messenger->set_myname(entity_name_t::CLIENT(monclient.get_global_id())); @@ -388,7 +390,7 @@ bool RadosClient::init() dout(1) << "init done" << dendl; - return true; + return 0; } void RadosClient::shutdown() @@ -1842,10 +1844,16 @@ extern "C" int rados_initialize(int argc, const char **argv) if (!rados_initialized) { __rados_init(argc, argv); radosp = new RadosClient; - radosp->init(); + if (!radosp) { + ret = -ENOMEM; + goto done; + } + ret = radosp->init(); + if (ret < 0) + goto done; } ++rados_initialized; - +done: rados_init_mutex.Unlock(); return ret; } -- 2.39.5