> On June 30, 2016, 12:24 a.m., Benjamin Mahler wrote:
> > Looks good, thanks! Can you also sweep up the remaining Socket pointers
> > that were not as related to the race you found?
Actually, on second thought per our converstation. Could we fix this more
minimally by adding `new`s?
```
socket->recv(data, size)
.onAny(lambda::bind(
&internal::ignore_recv_data,
lambda::_1,
new Socket(*socket), // XXX: new here
data,
size));
```
That would make backporting easier, the fix more obvious for posterity, and we
can follow up with a complete pointer sweep in a separate patch.
- Benjamin
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/49404/#review140079
-----------------------------------------------------------
On June 29, 2016, 11:56 p.m., Joseph Wu wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/49404/
> -----------------------------------------------------------
>
> (Updated June 29, 2016, 11:56 p.m.)
>
>
> Review request for mesos, Benjamin Mahler and Artem Harutyunyan.
>
>
> Bugs: MESOS-5748
> https://issues.apache.org/jira/browse/MESOS-5748
>
>
> Repository: mesos
>
>
> Description
> -------
>
> `Sockets` is already a reference-counted `shared_ptr` under the covers.
> By passing around `Sockets` by value, we avoid potentially deleting
> a reference while the same reference is in use by another function.
>
> This fixes a rare race (segfault) between `link`/`send` and
> `ignore_recv_data`. If the peer of the socket exits between
> establishing a connection and libprocess queuing a `MessageEncoder`,
> `ignore_recv_data` may delete the `Socket` underneath the `link`/`send`.
>
>
> Diffs
> -----
>
> 3rdparty/libprocess/src/process.cpp
> 9bae71246e751e491be5a989eea8aca29c9aa751
>
> Diff: https://reviews.apache.org/r/49404/diff/
>
>
> Testing
> -------
>
> make check (OSX)
>
> 3rdparty/libprocess/libprocess-tests
> --gtest_filter="ProcessRemoteLinkTest.RemoteLink" --gtest_break_on_failure
> --gtest_repeat=10000
>
>
> Thanks,
>
> Joseph Wu
>
>