[ 
https://issues.apache.org/jira/browse/IGNITE-5208?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16010771#comment-16010771
 ] 

Igor Sapego commented on IGNITE-5208:
-------------------------------------

[~tghosgor], thank you for report and for your help. I'm going to submit patch 
in few hours and hopefully it's going to be in master in few days. Your patch 
looks very right - you may use it as a fix for now.

> C++ Segfault on Put
> -------------------
>
>                 Key: IGNITE-5208
>                 URL: https://issues.apache.org/jira/browse/IGNITE-5208
>             Project: Ignite
>          Issue Type: Bug
>          Components: platforms
>    Affects Versions: 2.0
>            Reporter: Tolga HOŞGÖR
>            Assignee: Igor Sapego
>            Priority: Critical
>              Labels: c++
>             Fix For: 2.1
>
>
> 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.
> {code:none}
> 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
> {code}
> There seems to be some kind of race situation:
> {code:none}
> 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
> {code}
> {code:none}
> #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}
> {code}
> `impl` pointers seems to be corrupted on multiple places.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to