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>
(cherry picked from commit
00184814c156f6194a6ba4b696073ca1c18a3f8f)
Adjustments:
- release g_ceph_context in the same way as the main code path does
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;
+ g_ceph_context->put();
+ exit(err < 0 ? 1 : 0);
}
if (dump_journal) {
common_init_finish(g_ceph_context);