ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Igor Sapego (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (IGNITE-5208) C++ Segfault on Put
Date Mon, 15 May 2017 16:31:04 GMT

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

Igor Sapego edited comment on IGNITE-5208 at 5/15/17 4:30 PM:
--------------------------------------------------------------

[~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 correct - you may use
it as a fix for now.


was (Author: isapego):
[~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)

Mime
View raw message