Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pure virtual method called, terminate called without an active exception #217

Closed
messense opened this issue Aug 29, 2018 · 6 comments
Closed

Comments

@messense
Copy link

Seems related to facebook/rocksdb#649

Backtrace:

(gdb) bt full
#0  0x00007fec6328a428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
        resultvar = 0
        pid = 15954
        selftid = 15979
#1  0x00007fec6328c02a in __GI_abort () at abort.c:89
        save_stage = 2
        act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {140653252893695, 140653256353088, 45, 45, 94051937857424, 45, 140653252895626,
              140653189122032, 45, 140653256353088, 94051937857424, 45, 1, 140653241551968, 140653252851643, 94051932111120}}, sa_flags = 1600113056,
          sa_restorer = 0x7fec5f5fca98}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x0000558a2c16904d in __gnu_cxx::__verbose_terminate_handler() ()
No symbol table info available.
#3  0x0000558a2c00fc46 in __cxxabiv1::__terminate(void (*)()) ()
No symbol table info available.
#4  0x0000558a2c00fc81 in std::terminate() ()
No symbol table info available.
#5  0x0000558a2c01012f in __cxa_pure_virtual ()
No symbol table info available.
#6  0x0000558a2bd9c758 in rocksdb::DBImpl::FindObsoleteFiles (this=0x7fec62237000, job_context=0x7fec5f5fca60, force=true, no_full_scan=false)
    at /root/.cargo/git/checkouts/rust-rocksdb-82ef6e5337b3fbe6/d2fe0a9/librocksdb_sys/rocksdb/db/db_impl_files.cc:201
        files = {<std::_Vector_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >> = {
            _M_impl = {<std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {<__gnu_cxx::new_allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}
        path_id = 0
        doing_the_full_scan = true
        __PRETTY_FUNCTION__ = "void rocksdb::DBImpl::FindObsoleteFiles(rocksdb::JobContext*, bool, bool)"
#7  0x0000558a2bd4453c in rocksdb::DBImpl::~DBImpl (this=0x7fec62237000, __in_chrg=<optimized out>)
    at /root/.cargo/git/checkouts/rust-rocksdb-82ef6e5337b3fbe6/d2fe0a9/librocksdb_sys/rocksdb/db/db_impl.cc:308
        job_context = {job_id = 2,
          full_scan_candidate_files = {<std::_Vector_base<rocksdb::JobContext::CandidateFileInfo, std::allocator<rocksdb::JobContext::CandidateFileInfo> >> = {
              _M_impl = {<std::allocator<rocksdb::JobContext::CandidateFileInfo>> = {<__gnu_cxx::new_allocator<rocksdb::JobContext::CandidateFileInfo>> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>},
          sst_live = {<std::_Vector_base<rocksdb::FileDescriptor, std::allocator<rocksdb::FileDescriptor> >> = {
              _M_impl = {<std::allocator<rocksdb::FileDescriptor>> = {<__gnu_cxx::new_allocator<rocksdb::FileDescriptor>> = {<No data fields>}, <No data fields>},
                _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>},
          sst_delete_files = {<std::_Vector_base<rocksdb::FileMetaData*, std::allocator<rocksdb::FileMetaData*> >> = {
              _M_impl = {<std::allocator<rocksdb::FileMetaData*>> = {<__gnu_cxx::new_allocator<rocksdb::FileMetaData*>> = {<No data fields>}, <No data fields>}, _M_start = 0x0,
                _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}, log_delete_files = {<std::_Vector_base<unsigned long, std::allocator<unsigned long> >> = {
              _M_impl = {<std::allocator<unsigned long>> = {<__gnu_cxx::new_allocator<unsigned long>> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
                _M_end_of_storage = 0x0}}, <No data fields>}, log_recycle_files = {<std::_Vector_base<unsigned long, std::allocator<unsigned long> >> = {
              _M_impl = {<std::allocator<unsigned long>> = {<__gnu_cxx::new_allocator<unsigned long>> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
                _M_end_of_storage = 0x0}}, <No data fields>},
          manifest_delete_files = {<std::_Vector_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >> = {
              _M_impl = {<std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {<__gnu_cxx::new_allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
                _M_end_of_storage = 0x0}}, <No data fields>}, memtables_to_free = {num_stack_items_ = 0, values_ = {0x7fec5f5fcc60, 0x7fec5f5fcc18, 0x7fec5f5fcc18, 0x0,
              0x7fec62264300, 0x0, 0x0, 0x7fec62264300}, vect_ = {<std::_Vector_base<rocksdb::MemTable*, std::allocator<rocksdb::MemTable*> >> = {
                _M_impl = {<std::allocator<rocksdb::MemTable*>> = {<__gnu_cxx::new_allocator<rocksdb::MemTable*>> = {<No data fields>}, <No data fields>}, _M_start = 0x0,
---Type <return> to continue, or q <return> to quit---
                  _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}}, superversions_to_free = {num_stack_items_ = 0, values_ = {0x1, 0x0, 0x0, 0x7fec62264300, 0x0,
              0x0, 0x0, 0x7fec62264300}, vect_ = {<std::_Vector_base<rocksdb::SuperVersion*, std::allocator<rocksdb::SuperVersion*> >> = {
                _M_impl = {<std::allocator<rocksdb::SuperVersion*>> = {<__gnu_cxx::new_allocator<rocksdb::SuperVersion*>> = {<No data fields>}, <No data fields>},
                  _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}}, logs_to_free = {num_stack_items_ = 0, values_ = {0x0, 0x1, 0x0,
              0x7fec62264300, 0x0, 0x558a2bcf357e <core::ptr::drop_in_place::h5e85685604f319cd+14>, 0x7fec5f5fcc18, 0x558a2bcf2af6 <core::mem::drop::h9876f19c4cb5f87b+6>},
            vect_ = {<std::_Vector_base<rocksdb::log::Writer*, std::allocator<rocksdb::log::Writer*> >> = {
                _M_impl = {<std::allocator<rocksdb::log::Writer*>> = {<__gnu_cxx::new_allocator<rocksdb::log::Writer*>> = {<No data fields>}, <No data fields>}, _M_start = 0x0,
                  _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}}, new_superversion = 0x0, manifest_file_number = 1, pending_manifest_file_number = 0,
          log_number = 0, prev_log_number = 0, min_pending_output = 18446744073709551615, prev_total_log_size = 0, num_alive_log_files = 0, size_log_to_delete = 0}
        bottom_compactions_unscheduled = 0
        compactions_unscheduled = 0
        flushes_unscheduled = 0
#8  0x0000558a2bd44be4 in rocksdb::DBImpl::~DBImpl (this=0x7fec62237000, __in_chrg=<optimized out>)
    at /root/.cargo/git/checkouts/rust-rocksdb-82ef6e5337b3fbe6/d2fe0a9/librocksdb_sys/rocksdb/db/db_impl.cc:357
No locals.
#9  0x0000558a2bcfe377 in crocksdb_close (db=0x7fec6220e0a0) at crocksdb/c.cc:625
No locals.
#10 0x0000558a2bcd2d22 in _$LT$rocksdb..rocksdb..DB$u20$as$u20$core..ops..drop..Drop$GT$::drop::h2ac165b0cf253c3d (self=0x7fec62263a98)
    at /root/.cargo/git/checkouts/rust-rocksdb-82ef6e5337b3fbe6/d2fe0a9/src/rocksdb.rs:1582
No locals.
#11 0x0000558a2bba0cc1 in core::ptr::drop_in_place::h97fab4ada650e341 () at /checkout/src/libcore/ptr.rs:59
No locals.
#12 0x0000558a2bb9f57e in core::ptr::drop_in_place::h3a6be14143cc2e2e () at /checkout/src/libcore/ptr.rs:59
No locals.
#13 0x0000558a2bb9e6a2 in core::ptr::drop_in_place::h072cfe027ee67582 () at /checkout/src/libcore/ptr.rs:59
No locals.
#14 0x0000558a2bbdc149 in _$LT$alloc..arc..Arc$LT$T$GT$$GT$::drop_slow::h0e11a16304d8b69e (self=0x7fec62223618) at /checkout/src/liballoc/arc.rs:518
No locals.
#15 0x0000558a2bbdc698 in _$LT$alloc..arc..Arc$LT$T$GT$$u20$as$u20$core..ops..drop..Drop$GT$::drop::h926d7cd4ebb7d763 (self=0x7fec62223618) at /checkout/src/liballoc/arc.rs:970
No locals.
#16 0x0000558a2bba296e in core::ptr::drop_in_place::hfd82c084fa5c60fd () at /checkout/src/libcore/ptr.rs:59
No locals.
#17 0x0000558a2bb9e446 in core::ptr::drop_in_place::h00c7f93423fb69d6 () at /checkout/src/libcore/ptr.rs:59
No locals.
#18 0x0000558a2bb9ffde in core::ptr::drop_in_place::h68e30018dc1d3716 () at /checkout/src/libcore/ptr.rs:59
No locals.
#19 0x0000558a2bb9f802 in core::ptr::drop_in_place::h429703ace45d86ca () at /checkout/src/libcore/ptr.rs:59
No locals.
#20 0x0000558a2bb9ecee in core::ptr::drop_in_place::h20572535cde93bfb () at /checkout/src/libcore/ptr.rs:59
No locals.
#21 0x0000558a2c269d57 in core::ptr::drop_in_place::ha34938100ebf2a42 () at /checkout/src/libcore/ptr.rs:59
No locals.
#22 0x0000558a2c26a8a2 in core::ptr::drop_in_place::hf2a71eb873ce3d76 () at /checkout/src/libcore/ptr.rs:59
No locals.
#23 0x0000558a2c2637fe in _$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$::rev_drop_buckets::h9c1df0822f5c0f7a (self=0x7fec5d5c8620)
    at /checkout/src/libstd/collections/hash/table.rs:837
        elems_left = 0
        raw = {hash_start = 0x7fec622fba00, pair_start = 0x7fec622fbb00, idx = 7, _marker = {<No data fields>}}
#24 0x0000558a2c267ebf in _$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$u20$as$u20$core..ops..drop..Drop$GT$::drop::ha559415df48328a4 (self=0x7fec5d5c8620)
    at /checkout/src/libstd/collections/hash/table.rs:1120
---Type <return> to continue, or q <return> to quit---
No locals.
#25 0x0000558a2c26870e in core::ptr::drop_in_place::h1499dfdb63bddca7 () at /checkout/src/libcore/ptr.rs:59
No locals.
#26 0x0000558a2c26a1e2 in core::ptr::drop_in_place::hc7bd72cd635a1367 () at /checkout/src/libcore/ptr.rs:59
No locals.
#27 0x0000558a2c26ea19 in _$LT$alloc..arc..Arc$LT$T$GT$$GT$::drop_slow::hc00b5a15d150e749 (self=0x7fec5f5fd0e0) at /checkout/src/liballoc/arc.rs:518
No locals.
#28 0x0000558a2c26f3a8 in _$LT$alloc..arc..Arc$LT$T$GT$$u20$as$u20$core..ops..drop..Drop$GT$::drop::h341dff866ebe6a05 (self=0x7fec5f5fd0e0) at /checkout/src/liballoc/arc.rs:970
No locals.
#29 0x0000558a2c269c8e in core::ptr::drop_in_place::h98299116f6f7f88f () at /checkout/src/libcore/ptr.rs:59
No locals.
#30 0x0000558a2c268d76 in core::ptr::drop_in_place::h3a9cf13d180fe1b2 () at /checkout/src/libcore/ptr.rs:59
No locals.
#31 0x0000558a2c29241d in grpcio::server::request_call::h450284c89871c0ee (ctx=..., cq=0x7fec5f5fd588)
    at /root/.cargo/git/checkouts/grpc-rs-d2d7508a79dd0c2c/3aab8fa/src/server.rs:416
No locals.
#32 0x0000558a2c27deca in grpcio::async::callback::Request::resolve::h3d3c1d403a5bec3e (self=..., cq=0x7fec5f5fd588, success=false)
    at /root/.cargo/git/checkouts/grpc-rs-d2d7508a79dd0c2c/3aab8fa/src/async/callback.rs:36
        rc = {server = {ptr = {pointer = {__0 = 0x7fec6230a580}}, phantom = {<No data fields>}}, registry = {ptr = {pointer = {__0 = 0x7fec5d5c8600}},
            phantom = {<No data fields>}}}
#33 0x0000558a2c272c9b in grpcio::async::CallTag::resolve::hb56eeda5e2ddbabe (self=..., cq=0x7fec5f5fd588, success=false)
    at /root/.cargo/git/checkouts/grpc-rs-d2d7508a79dd0c2c/3aab8fa/src/async/mod.rs:188
        cb = {ctx = {ctx = 0x7fec5d5de680, request_call = {RUST$ENCODED$ENUM$0$None = {__0 = {server = {ptr = {pointer = {__0 = 0x7fec6230a580}}, phantom = {<No data fields>}},
                  registry = {ptr = {pointer = {__0 = 0x7fec5d5c8600}}, phantom = {<No data fields>}}}}}}}
#34 0x0000558a2c2742a4 in grpcio::env::poll_queue::hdaacb53bf69da953 (cq=...) at /root/.cargo/git/checkouts/grpc-rs-d2d7508a79dd0c2c/3aab8fa/src/env.rs:38
        tag = 0x7fec5d5ddac0
        e = {event_type = OpComplete, success = 0, tag = 0x7fec5d5ddac0}
        cq = {handle = {ptr = {pointer = {__0 = 0x7fec6220d480}}, phantom = {<No data fields>}}, id = {__0 = 3}}
        id = {__0 = 3}
#35 0x0000558a2c274e7e in grpcio::env::EnvBuilder::build::_$u7b$$u7b$closure$u7d$$u7d$::hc7423c81655cab16 ()
    at /root/.cargo/git/checkouts/grpc-rs-d2d7508a79dd0c2c/3aab8fa/src/env.rs:89
        cq_ = {ptr = {pointer = {__0 = 0x7fec6220d480}}, phantom = {<No data fields>}}
#36 0x0000558a2c27d0a3 in std::sys_common::backtrace::__rust_begin_short_backtrace::h5892641247c36312 (f=...) at /checkout/src/libstd/sys_common/backtrace.rs:136
No locals.
#37 0x0000558a2c285cde in std::thread::Builder::spawn::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h34353941d6f6ecc3 () at /checkout/src/libstd/thread/mod.rs:409
        f = {__0 = {ptr = {pointer = {__0 = 0x7fec6220d480}}, phantom = {<No data fields>}}}
#38 0x0000558a2c2850e1 in _$LT$std..panic..AssertUnwindSafe$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$$LP$$RP$$GT$$GT$::call_once::hd2e8a88366f0d4bb (self=..., _args=0)
    at /checkout/src/libstd/panic.rs:308
No locals.
#39 0x0000558a2c285de5 in std::panicking::try::do_call::h11b29cde0103485a (data=0x7fec5f5fd728 "\200\324 b\354\177") at /checkout/src/libstd/panicking.rs:310
        f = {__0 = {__0 = {__0 = {ptr = {pointer = {__0 = 0x7fec6220d480}}, phantom = {<No data fields>}}}}}
        data = 0x7fec5f5fd728
#40 0x0000558a2c4618ba in __rust_maybe_catch_panic () at libpanic_unwind/lib.rs:105
No locals.
#41 0x0000558a2c285d23 in std::panicking::try::h23e2e79af118c046 (f=...) at /checkout/src/libstd/panicking.rs:289
        data = {f = {__0 = {__0 = {__0 = {ptr = {pointer = {__0 = 0x7fec6220d480}}, phantom = {<No data fields>}}}}}, r = 0}
        any_vtable = 0
        any_data = 0
#42 0x0000558a2c285393 in std::panic::catch_unwind::h22fc5f9cf7e98103 (f=...) at /checkout/src/libstd/panic.rs:392
No locals.
---Type <return> to continue, or q <return> to quit---
#43 0x0000558a2c285af8 in std::thread::Builder::spawn::_$u7b$$u7b$closure$u7d$$u7d$::h524a46ca26b5327b () at /checkout/src/libstd/thread/mod.rs:408
        their_thread = {inner = {ptr = {pointer = {__0 = 0x7fec622475d0}}, phantom = {<No data fields>}}}
        f = {__0 = {ptr = {pointer = {__0 = 0x7fec6220d480}}, phantom = {<No data fields>}}}
        their_packet = {ptr = {pointer = {__0 = 0x7fec62223930}}, phantom = {<No data fields>}}
#44 0x0000558a2c286687 in _$LT$F$u20$as$u20$alloc..boxed..FnBox$LT$A$GT$$GT$::call_box::h3ee5fd4ce6423e40 (self=0x7fec622ce0a0, args=0) at /checkout/src/liballoc/boxed.rs:640
No locals.
#45 0x0000558a2c4416ab in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::h75e539106a648d39 () at /checkout/src/liballoc/boxed.rs:650
No locals.
#46 std::sys_common::thread::start_thread::h88a639c99862a9f5 () at libstd/sys_common/thread.rs:24
No locals.
#47 0x0000558a2c4444e6 in std::sys::unix::thread::Thread::new::thread_start::h7d7a420a78cfa84d () at libstd/sys/unix/thread.rs:90
No locals.
#48 0x00007fec6383c6ba in start_thread (arg=0x7fec5f5fe700) at pthread_create.c:333
        __res = <optimized out>
        pd = 0x7fec5f5fe700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140653189129984, -8042882024657569378, 0, 140653241551711, 140653189130688, 140653241551968, 8050553593405192606,
                8050525658483472798}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#49 0x00007fec6335c41d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
No locals.
@siddontang
Copy link

can you tell us how to reproduce it? seem it happens when closing Database.

@messense
Copy link
Author

messense commented Aug 30, 2018

See the code here: https://github.com/messense/crash-kv

Keep running cargo test to reproduce it.
image
image

@siddontang
Copy link

PTAL @DorianZheng

@messense
Copy link
Author

messense commented Sep 7, 2018

Ping, any update?

@DorianZheng
Copy link

DorianZheng commented Sep 8, 2018

Thank you @messense for file this issue. From strace output, I can tell that this is bug of grpc-io: one thread of grpc-io called "grpc-poll-1" which holds the ref of db exists after main thread exists, and env_ of rocksdb will be destruct after main thread exit because it is a static variable

@siddontang
Copy link

@messense

we have moved to tikv/grpc-rs#227

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants