Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-5208

CPP: Segfault on Put

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • 2.0
    • 2.1
    • platforms

    Description

      The following segfault happens when:

      • using multiple caches (suffixed with number as in X_{number}),
      • caches contain same type of object but not the same objects,
      • doing multithreaded `::Put` operation, only one put is done on each cache concurrently, independent caches (X_1, X_2, ...) can be operated on and called `::Put` on concurrently, but that should not be relevant as cache api is thread safe.
      C  [test+0xf8116a]  std::less<int>::operator()(int const&, int const&) const+0x14
      C  [test+0x1106305]  std::_Rb_tree<int, std::pair<int const, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot> >, std::_Select1st<std::pair<int const, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot> > >, std::less<int>, std::allocator<std::pair<int const, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot> > > >::_M_lower_bound(std::_Rb_tree_node<std::pair<int const, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot> > >*, std::_Rb_tree_node_base*, int const&)+0x41
      C  [test+0x1105a9d]  std::_Rb_tree<int, std::pair<int const, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot> >, std::_Select1st<std::pair<int const, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot> > >, std::less<int>, std::allocator<std::pair<int const, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot> > > >::find(int const&)+0x45
      C  [test+0x1104e7f]  std::map<int, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot>, std::less<int>, std::allocator<std::pair<int const, ignite::common::concurrent::SharedPointer<ignite::impl::binary::BinaryTypeSnapshot> > > >::find(int const&)+0x23
      C  [test+0x1104031]  ignite::impl::binary::BinaryTypeManager::GetHandler(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x6f
      C  [test+0xe6de2d]  void ignite::impl::binary::BinaryWriterImpl::WriteTopObject<std::shared_ptr<test::data> >(std::shared_ptr<test::data> const&)+0xbb
      C  [test+0xe6cd48]  ignite::impl::In2Operation<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<test::data> >::ProcessInput(ignite::impl::binary::BinaryWriterImpl&)+0x3e
      C  [test+0x1128cf1]  ignite::impl::interop::InteropTarget::WriteTo(ignite::impl::interop::InteropMemory*, ignite::impl::InputOperation&, ignite::IgniteError&)+0xa9
      C  [test+0x1128f67]  ignite::impl::interop::InteropTarget::OutOp(int, ignite::impl::InputOperation&, ignite::IgniteError&)+0x65
      C  [test+0x1125f41]  ignite::impl::cache::CacheImpl::Put(ignite::impl::InputOperation&, ignite::IgniteError&)+0x2d
      C  [test+0xe5539a]  ignite::cache::Cache<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<test::data> >::Put(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<test::data> const&, ignite::IgniteError&)+0x52
      

      There seems to be some kind of race situation:

      0x0000000001381206 in std::less<int>::operator() (this=0x1a4e4b0, __x=<error reading variable>, __y=@0x7fff80846e04: 2066246303) at /usr/include/c++/6.3.1/bits/stl_function.h:386
      
      #4  0x00000000015040cd in ignite::impl::binary::BinaryTypeManager::GetHandler (this=0x1a560d0, typeName="test.data", typeId=2066246303) at src/impl/binary/binary_type_manager.cpp:56
      56                          std::map<int32_t, SPSnap>::iterator it = snapshots0.find(typeId);
      (gdb) print snapshots0
      $10 = std::map with 42286576 elements = {[42312864] = {ptr = 0x285a4a0, impl = 0x0}<error reading variable: Cannot access memory at address 0x110>...}
      (gdb) print snapshot
      $11 = {ptr = 0x7fffffffda4f, impl = 0x11}
      

      `impl` pointers seems to be corrupted on multiple places.

      Attachments

        Issue Links

          Activity

            People

              isapego Igor Sapego
              tghosgor Tolga HOŞGÖR
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: