> On Jan. 19, 2016, 6:29 p.m., haosdent huang wrote:
> > 3rdparty/libprocess/src/process.cpp, line 1306
> > <https://reviews.apache.org/r/40266/diff/2/?file=1151884#file1151884line1306>
> >
> >     Is it possible sockets not empty when exit this loop?

Definitely possible.  We currently do not track the futures from 
`socket->send()` (specifically the calls in `internal::send(Encoder* encoder, 
Socket* socket)`).

i.e.
1) We call `ProcessBase::send` to a remote process.
2) Libprocess creates a socket and starts to write data.
3) We call `process::finalize` (+ this patch).
4) The main process exits, but does not necessarily clean up the socket created 
during `ProcessBase::send`.
5) SocketManager cleanup happens, which closes the socket, but doesn't finish 
sending first.

---

Seems like it would be fairly simple to track the futures from 
`internal::send(Encoder* encoder, Socket* socket)` and wait for them to finish 
during finalization.
(As is required in MESOS-4111.)


- Joseph


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


On Dec. 2, 2015, 4:50 p.m., Joseph Wu wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/40266/
> -----------------------------------------------------------
> 
> (Updated Dec. 2, 2015, 4:50 p.m.)
> 
> 
> Review request for mesos, Artem Harutyunyan and Joris Van Remoortere.
> 
> 
> Bugs: MESOS-3910
>     https://issues.apache.org/jira/browse/MESOS-3910
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> The `SocketManager` and `ProcessManager` are highly inter-dependent, which 
> requires some untangling in `process::finalize`.
> 
> * Logic originally found in `~ProcessManager` has been split into 
> `ProcessManager::finalize` due to what happens during cleanup.
> * Some additional cleanup was added for dangling pointers.
> * The future from `__s__->accept()` must be explicitly discarded as libevent 
> does not detect a locally closed socket.
> 
> 
> Diffs
> -----
> 
>   3rdparty/libprocess/src/process.cpp 
> a7af4671efa2f370137ed4a749e5247c91e6f95e 
> 
> Diff: https://reviews.apache.org/r/40266/diff/
> 
> 
> Testing
> -------
> 
> `make check` (libev)
> `make check` (--enable-libevent --enable-ssl)
> 
> 
> Thanks,
> 
> Joseph Wu
> 
>

Reply via email to