]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-osd: --flush-journal: sporadic segfaults on exit 13311/head
authorAlexey Sheplyakov <asheplyakov@mirantis.com>
Tue, 7 Feb 2017 12:47:45 +0000 (16:47 +0400)
committerAlexey Sheplyakov <asheplyakov@mirantis.com>
Thu, 9 Feb 2017 11:32:21 +0000 (15:32 +0400)
FileStore holds a number of recources like op thread pool and work
queue, key/value DB threads, etc. These should be properly stopped
(released) before exiting to avoid segfaults on exit.

Note: more code paths (mkfs, dump_journal, etc) need similar fixes,
these will be submitted as separate patches.

Fixes: http://tracker.ceph.com/issues/18820
Signed-off-by: Alexey Sheplyakov <asheplyakov@mirantis.com>
src/ceph_osd.cc

index 6d796056e1657dc4252854d14f01495bb7e5a283..3565e2496798e68a30b1287545761b98ef57f8f0 100644 (file)
@@ -355,13 +355,15 @@ int main(int argc, const char **argv)
       derr << TEXT_RED << " ** ERROR: error flushing journal " << g_conf->osd_journal
           << " for object store " << g_conf->osd_data
           << ": " << cpp_strerror(-err) << TEXT_NORMAL << dendl;
-      exit(1);
+      goto flushjournal_out;
     }
     store->umount();
     derr << "flushed journal " << g_conf->osd_journal
         << " for object store " << g_conf->osd_data
         << dendl;
-    exit(0);
+flushjournal_out:
+    delete store;
+    exit(err < 0 ? 1 : 0);
   }
   if (dump_journal) {
     common_init_finish(g_ceph_context);