-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/18386/#review35673
-----------------------------------------------------------


Hey Dominic, I found an issue applying these Option patches, looks like 
slave.cpp:3001 ( 
https://github.com/apache/mesos/blob/20a6993e1b50bf46089cd5e059634ac446b08ac2/src/slave/slave.cpp#L3001
 ) is problematic:

struct ExecutorState
{
  ExecutorID id;
  Option<ExecutorInfo> info;
  Option<ContainerID> latest;
  hashmap<ContainerID, RunState> runs;
  unsigned int errors;
};

void Framework::recoverExecutor(const ExecutorState& state)
{
  ...
  const RunState& run = state.runs.get(latest).get();
                        <----- rvalue ------->
                        < lvalue of temp Option::t >
}

I'm not 100% clear on what the standard specifies here, but it doesn't look 
like we're extending the life of a temporary here, since we're grabbing a 
_member_ from a temporary.

[ RUN      ] SlaveRecoveryTest/0.RecoverStatusUpdateManager
Detaching after fork from child process 51693.
Detaching after fork from child process 51694.
Detaching after fork from child process 51708.
Detaching after fork from child process 51709.
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0227 18:46:06.952373 51709 exec.cpp:131] Version: 0.19.0
I0227 18:46:06.956939 51742 exec.cpp:205] Executor registered on slave 
2014-02-27-18:46:06-1740121354-59276-51387-0
Registered executor on smfd-bkq-03-sr4.devel.twitter.com
Starting task 9fe870d9-4b47-489f-b863-2a929ade31a8
sh -c 'sleep 1000'
Forked command at 51749

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffecb03940 (LWP 51403)]
0x0000000000a09656 in 
boost::unordered::detail::table<boost::unordered::detail::map<std::allocator<std::pair<mesos::TaskID
 const, mesos::internal::slave::state::TaskState> >, mesos::TaskID, 
mesos::internal::slave::state::TaskState, boost::hash<mesos::TaskID>, 
std::equal_to<mesos::TaskID> > >::begin (this=0x7fffd803d810) at 
../3rdparty/libprocess/3rdparty/boost-1.53.0/boost/unordered/detail/table.hpp:249
249                 return size_ ? iterator(get_previous_start()->next_) : 
iterator();
(gdb) where
#0  0x0000000000a09656 in 
boost::unordered::detail::table<boost::unordered::detail::map<std::allocator<std::pair<mesos::TaskID
 const, mesos::internal::slave::state::TaskState> >, mesos::TaskID, 
mesos::internal::slave::state::TaskState, boost::hash<mesos::TaskID>, 
std::equal_to<mesos::TaskID> > >::begin (this=0x7fffd803d810) at 
../3rdparty/libprocess/3rdparty/boost-1.53.0/boost/unordered/detail/table.hpp:249
#1  0x00007ffff62deccb in boost::unordered::unordered_map<mesos::TaskID, 
mesos::internal::slave::state::TaskState, boost::hash<mesos::TaskID>, 
std::equal_to<mesos::TaskID>, std::allocator<std::pair<mesos::TaskID const, 
mesos::internal::slave::state::TaskState> > >::begin (this=0x7fffd803d810) at 
../3rdparty/libprocess/3rdparty/boost-1.53.0/boost/unordered/unordered_map.hpp:209
#2  0x00007ffff62decf7 in 
boost::range_detail::range_begin<hashmap<mesos::TaskID, 
mesos::internal::slave::state::TaskState> const> (c=...)
    at ../3rdparty/libprocess/3rdparty/boost-1.53.0/boost/range/begin.hpp:49
#3  0x00007ffff62ded0f in 
boost::range_adl_barrier::begin<hashmap<mesos::TaskID, 
mesos::internal::slave::state::TaskState> > (r=...) at 
../3rdparty/libprocess/3rdparty/boost-1.53.0/boost/range/begin.hpp:119
#4  0x00007ffff62ded37 in boost::foreach_detail_::begin<hashmap<mesos::TaskID, 
mesos::internal::slave::state::TaskState>, mpl_::bool_<true> > (col=...)
    at ../3rdparty/libprocess/3rdparty/boost-1.53.0/boost/foreach.hpp:674
#5  0x00007ffff62a4868 in mesos::internal::slave::Framework::recoverExecutor 
(this=0x7fffd804d6c0, state=...) at ../../src/slave/slave.cpp:3025
#6  0x00007ffff62aa668 in mesos::internal::slave::Slave::recoverFramework 
(this=0x7fffdc01c230, state=...) at ../../src/slave/slave.cpp:2767
#7  0x00007ffff62ab115 in mesos::internal::slave::Slave::recover 
(this=0x7fffdc01c230, _state=...) at ../../src/slave/slave.cpp:2576
#8  0x00007ffff62c77c4 in std::tr1::_Mem_fn<process::Future<Nothing> 
(mesos::internal::slave::Slave::*)(Result<mesos::internal::slave::state::SlaveState>
 const&)>::operator() (this=0x7fffe0036a40,
    __object=0x7fffdc01c230, __a1=...) at 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/tr1/functional_iterate.h:214
#9  0x00007ffff62cbdb1 in 
std::tr1::_Bind<std::tr1::_Mem_fn<process::Future<Nothing> 
(mesos::internal::slave::Slave::*)(const 
Result<mesos::internal::slave::state::SlaveState>&)> 
()(std::tr1::_Placeholder<1>, 
Result<mesos::internal::slave::state::SlaveState>)>::operator()<mesos::internal::slave::Slave*>(mesos::internal::slave::Slave
 *&) (this=0x7fffe0036a40, __u1=@0x7fffecb02d40)
    at 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/tr1/bind_iterate.h:45
#10 0x00007ffff62cbdf1 in std::tr1::_Function_handler<process::Future<Nothing> 
()(mesos::internal::slave::Slave*),std::tr1::_Bind<std::tr1::_Mem_fn<process::Future<Nothing>
 (mesos::internal::slave::Slave::*)(const 
Result<mesos::internal::slave::state::SlaveState>&)> 
()(std::tr1::_Placeholder<1>, 
Result<mesos::internal::slave::state::SlaveState>)> >::_M_invoke(const 
std::tr1::_Any_data &, mesos::internal::slave::Slave *) (__functor=..., 
__a1=0x7fffdc01c230) at 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/tr1/functional_iterate.h:488
#11 0x00007ffff62e1b4d in std::tr1::function<process::Future<Nothing> 
()(mesos::internal::slave::Slave*)>::operator()(mesos::internal::slave::Slave 
*) const (this=0x7fffe0036760, __a1=0x7fffdc01c230)
    at 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/tr1/functional_iterate.h:868
#12 0x00007ffff62f8a5d in process::internal::pdispatcher<Nothing, 
mesos::internal::slave::Slave>(process::ProcessBase *, 
std::tr1::shared_ptr<std::tr1::function<process::Future<Nothing> 
()(mesos::internal::slave::Slave*)> >, 
std::tr1::shared_ptr<process::Promise<Nothing> >) (process=0x7fffdc01c590, 
thunk=std::tr1::shared_ptr (count 2) 0x7fffecb02e50, 
promise=std::tr1::shared_ptr (count -536638560) 0x7fffecb02e30)
    at ../../3rdparty/libprocess/include/process/dispatch.hpp:88
#13 0x00007ffff62eedd5 in std::tr1::_Bind<void (* ()(std::tr1::_Placeholder<1>, 
std::tr1::shared_ptr<std::tr1::function<process::Future<Nothing> 
()(mesos::internal::slave::Slave*)> >, 
std::tr1::shared_ptr<process::Promise<Nothing> >))(process::ProcessBase*, 
std::tr1::shared_ptr<std::tr1::function<process::Future<Nothing> 
()(mesos::internal::slave::Slave*)> >, 
std::tr1::shared_ptr<process::Promise<Nothing> 
>)>::operator()<process::ProcessBase*>(process::ProcessBase *&) 
(this=0x7fffe002d340, __u1=@0x7fffecb02ea0) at 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/tr1/bind_iterate.h:45
#14 0x00007ffff62eee4d in std::tr1::_Function_handler<void 
()(process::ProcessBase*),std::tr1::_Bind<void (* ()(std::tr1::_Placeholder<1>, 
std::tr1::shared_ptr<std::tr1::function<process::Future<Nothing> 
()(mesos::internal::slave::Slave*)> >, 
std::tr1::shared_ptr<process::Promise<Nothing> >))(process::ProcessBase*, 
std::tr1::shared_ptr<std::tr1::function<process::Future<Nothing> 
()(mesos::internal::slave::Slave*)> >, 
std::tr1::shared_ptr<process::Promise<Nothing> >)> >::_M_invoke(const 
std::tr1::_Any_data &, process::ProcessBase *) (__functor=..., 
__a1=0x7fffdc01c590)
    at 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/tr1/functional_iterate.h:502
#15 0x00007ffff66bcded in std::tr1::function<void 
()(process::ProcessBase*)>::operator()(process::ProcessBase *) const 
(this=0x7fffe0035500, __a1=0x7fffdc01c590)
    at 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/tr1/functional_iterate.h:868
#16 0x00007ffff6679593 in process::ProcessBase::visit (this=0x7fffdc01c590, 
event=...) at ../../../3rdparty/libprocess/src/process.cpp:3183
#17 0x00007ffff6690e3e in process::DispatchEvent::visit (this=0x7fffe0035580, 
visitor=0x7fffdc01c590) at 
../../../3rdparty/libprocess/include/process/event.hpp:136
#18 0x000000000066b1fa in process::ProcessBase::serve (this=0x7fffdc01c590, 
event=...) at ../../3rdparty/libprocess/include/process/process.hpp:38
#19 0x00007ffff66840f4 in process::ProcessManager::resume (this=0x10c41d0, 
process=0x7fffdc01c590) at ../../../3rdparty/libprocess/src/process.cpp:2611
#20 0x00007ffff6684948 in process::schedule (arg=0x0) at 
../../../3rdparty/libprocess/src/process.cpp:1305
#21 0x00007ffff4ffe83d in start_thread () from /lib64/libpthread.so.0
#22 0x00007ffff3d6526d in clone () from /lib64/libc.so.6

- Ben Mahler


On Feb. 27, 2014, 5:12 p.m., Dominic Hamon wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/18386/
> -----------------------------------------------------------
> 
> (Updated Feb. 27, 2014, 5:12 p.m.)
> 
> 
> Review request for mesos and Ben Mahler.
> 
> 
> Bugs: MESOS-1008
>     https://issues.apache.org/jira/browse/MESOS-1008
> 
> 
> Repository: mesos-git
> 
> 
> Description
> -------
> 
> See summary
> 
> 
> Diffs
> -----
> 
>   src/linux/fs.hpp 1d86dd0d24c3daae957b5eec387638d1e8e6d7db 
>   src/linux/fs.cpp e5f4f9a16becd4e5960d0cbb7f988736188b2426 
>   src/log/log.cpp 62dc9286285d5981aa5fc63e125d3c3f51d4f457 
>   src/sched/sched.cpp dcb3158d2acd93a107fda51b19e92899a092e628 
> 
> Diff: https://reviews.apache.org/r/18386/diff/
> 
> 
> Testing
> -------
> 
> make check
> 
> 'grep' for cases where Options are reassigned after references are taken.
> 
> 
> Thanks,
> 
> Dominic Hamon
> 
>

Reply via email to