New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 701838 link

Starred by 1 user

Issue metadata

Status: WontFix
Owner:
Closed: Mar 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: iOS
Pri: 2
Type: Bug



Sign in to add a comment

syncer::SharedModelTypeProcessor::ModelReadyToSync crash

Project Member Reported by olivierrobin@chromium.org, Mar 15 2017

Issue description

App Version (from "Chrome Settings > About Chrome"): 57.0.2987.100
iOS Version: 10.2
Device: 

ID example
bb2f08a520000000

Stack
	0x0000000100ce2330	(Chrome -iterator:1244 )	syncer::SharedModelTypeProcessor::ModelReadyToSync(std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >)
0x0000000100ce226c	(Chrome -model_type_state.pb.h:50 )	syncer::SharedModelTypeProcessor::ModelReadyToSync(std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >)
0x0000000100179108	(Chrome -reading_list_store.cc:162 )	ReadingListStore::OnReadAllMetadata(base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >)
0x000000010017a0a8	(Chrome -bind_internal.h:214 )	void base::internal::FunctorTraits<void (ReadingListStore::*)(base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), void>::Invoke<base::WeakPtr<ReadingListStore> const&, base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> > >(void (ReadingListStore::*)(base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), base::WeakPtr<ReadingListStore> const&&&, base::Optional<syncer::ModelError>&&, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >&&)
0x0000000100cdf354	(Chrome -callback.h:85 )	syncer::ModelTypeStoreImpl::DeserializeMetadata(base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >)
0x0000000100cdf248	(Chrome -model_type_store_impl.cc:283 )	syncer::ModelTypeStoreImpl::ReadAllMetadataDone(base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > >, syncer::ModelTypeStore::Result)
0x0000000100ce0a98	(Chrome -bind_internal.h:214 )	void base::internal::FunctorTraits<void (syncer::ModelTypeStoreImpl::*)(base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > >, syncer::ModelTypeStore::Result), void>::Invoke<base::WeakPtr<syncer::ModelTypeStoreImpl> const&, base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > >, syncer::ModelTypeStore::Result>(void (syncer::ModelTypeStoreImpl::*)(base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > >, syncer::ModelTypeStore::Result), base::WeakPtr<syncer::ModelTypeStoreImpl> const&&&, base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&&&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >&&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >&&, std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > >&&, syncer::ModelTypeStore::Result&&)
0x0000000100ce0994	(Chrome -bind_internal.h:305 )	void base::internal::Invoker<base::internal::BindState<void (syncer::ModelTypeStoreImpl::*)(base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > >, syncer::ModelTypeStore::Result), base::WeakPtr<syncer::ModelTypeStoreImpl>, base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1>, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > > >, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > > >, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > > > >, void (syncer::ModelTypeStore::Result)>::RunImpl<void (syncer::ModelTypeStoreImpl::* const&)(base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > >, syncer::ModelTypeStore::Result), std::__1::tuple<base::WeakPtr<syncer::ModelTypeStoreImpl>, base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1>, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > > >, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > > >, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > > > > const&, 0ul, 1ul, 2ul, 3ul, 4ul>(void (syncer::ModelTypeStoreImpl::* const&&&)(base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > >, std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > >, syncer::ModelTypeStore::Result), std::__1::tuple<base::WeakPtr<syncer::ModelTypeStoreImpl>, base::Callback<void (base::Optional<syncer::ModelError>, std::__1::unique_ptr<syncer::MetadataBatch, std::__1::default_delete<syncer::MetadataBatch> >), (base::internal::CopyMode)1, (base::internal::RepeatMode)1>, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > > >, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> >, std::__1::default_delete<std::__1::vector<syncer::ModelTypeStore::Record, std::__1::allocator<syncer::ModelTypeStore::Record> > > > >, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::default_delete<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > > > > const&&&, base::IndexSequence<0ul, 1ul, 2ul, 3ul, 4ul>, syncer::ModelTypeStore::Result&&)
0x0000000100ce0314	(Chrome -callback.h:85 )	void base::internal::ReplyAdapter<syncer::ModelTypeStore::Result, syncer::ModelTypeStore::Result>(base::Callback<void (syncer::ModelTypeStore::Result), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, syncer::ModelTypeStore::Result*)
0x00000001006e78e4	(Chrome -callback.h:85 )	base::(anonymous namespace)::PostTaskAndReplyRelay::RunReplyAndSelfDestruct()
0x00000001006a215c	(Chrome -callback.h:68 )	base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*)
0x00000001006b76bc	(Chrome -message_loop.cc:421 )	base::MessageLoop::RunTask(base::PendingTask*)
0x00000001006b7904	(Chrome -message_loop.cc:430 )	base::MessageLoop::DeferOrRunPendingTask(base::PendingTask)
0x00000001006b7bc4	(Chrome -message_loop.cc:523 )	base::MessageLoop::DoWork()
0x000000010070795c	(Chrome -message_pump_mac.mm:302 )	base::MessagePumpCFRunLoopBase::RunWork()

Note:
Affect a single user, but already 4 reports.
May be worth investigating.

 

Comment 1 by pav...@chromium.org, Mar 17 2017

Status: WontFix (was: Assigned)
Here is what I found so far:
- model_type_state.pb.h:50 points to ModelTypeState::operator=(). It is invoked in SharedModelTypeProcessor::ModelReadyToSync to copy ModelTypeState from MetadataBatch to local variable.
- iterator:1244 point to some operation with collection, but I fail to see which collection it could work with within ModelTypeState. All fields are optional with the exception of ModelTypeState.progress_marker.get_update_triggers.notification_hint. I checked the code that is invoked from operator=, didn't find any iterators operations.
- Thread crashed with EXC_BAD_INSTRUCTION / EXC_ARM_UNDEFINED with the address pointing to the code. I guess the issue is with some instruction, not the data.
- All the crashes came from single client, the same version. Is it possible there is some issue with the bits? This codepath is hit by every client, if there was some issue with the code I think more clients would hit this.

I don't think this bug is actionable at this point. I propose to close this bug as won't fix. Feel free to reopen it if another client hits the crash.

Sign in to add a comment