How to reproduce: implement a gRPC method that takes a stream and returns a stream and SIGKILL the client while processing the response stream.
DEBUG:grpc::http_common: received frame: Stream(Data(DataFrame { data: [0, 0, 0, 0, 43, 8, 1, 18, 5, 8, 244, 3, 16, 10, 18, 5, 8, 232, 7, 16, 100, 18, 4, 8, 0, 16, 0, 26, 5, 8, 244, 3, 16, 100, 26, 6, 8, 232, 7, 16, 232, 7, 26, 4, 8, 0, 16, 0], flags: 0, stream_id: 1, padding_len: None }))
DEBUG:grpc::http_common: received frame: Stream(Data(DataFrame { data: [0, 0, 0, 0, 43, 8, 1, 18, 5, 8, 244, 3, 16, 10, 18], flags: 0, stream_id: 1, padding_len: None }))
DEBUG:tokio_core::reactor: consuming notification queue
DEBUG:tokio_core::reactor: dropping I/O source: 19
DEBUG:tokio_core::reactor: consuming notification queue
DEBUG:tokio_core::reactor: dropping I/O source: 23
INFO:grpc::http_server: connection end: Err(IoError(Error { repr: Os { code: 54, message: "Connection reset by peer" } }))
WARN:grpc::server: connection end: IoError(Error { repr: Os { code: 54, message: "Connection reset by peer" } })
DEBUG:tokio_core::reactor: loop process - 48 events, Duration { secs: 1, nanos: 127582556 }
DEBUG:tokio_core::reactor: loop poll - Duration { secs: 0, nanos: 212791 }
DEBUG:tokio_core::reactor: loop time - Instant { t: 642707366147923 }
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
DEBUG:tokio_core::reactor: notifying a task handle
WARN:grpc::http_server: failed to write to channel, probably connection is closed: channel has been disconnected
WARN:grpc::http_server: failed to write to channel, probably connection is closed: channel has been disconnected
[..]
a flood of these warn messages occur followed by a panic
[...]
thread '<unnamed>' panicked at 'poll after eof', ../src/libcore/option.rs:705
stack backtrace:
1: 0x1078e6d88 - std::sys::backtrace::tracing::imp::write::h6f1d53a70916b90d
2: 0x1078e974f - std::panicking::default_hook::{{closure}}::h137e876f7d3b5850
3: 0x1078e86c5 - std::panicking::default_hook::h0ac3811ec7cee78c
4: 0x1078e8cd6 - std::panicking::rust_panic_with_hook::hc303199e04562edf
5: 0x1078e8b74 - std::panicking::begin_panic::h6ed03353807cf54d
6: 0x1078e8a92 - std::panicking::begin_panic_fmt::hc321cece241bb2f5
7: 0x1078e89f7 - rust_begin_unwind
8: 0x107912fa0 - core::panicking::panic_fmt::h27224b181f9f037f
9: 0x10791300d - core::option::expect_failed::h8606bc228cd3f504
10: 0x1074d74f5 - <core::option::Option<T>>::expect::h50f1038f976109fa
11: 0x10758d064 - <grpc::futures_misc::stream_with_eof_and_error::StreamWithEofAndError<S, F> as futures::stream::Stream>::poll::h1138dbf5b6f1045b
12: 0x107541cb0 - <Box<S> as futures::stream::Stream>::poll::h99583395fd082fa9
13: 0x107584384 - <grpc::grpc_frame::GrpcFrameFromHttpFramesStreamRequest as futures::stream::Stream>::poll::h4df6615273bee0c6
14: 0x10748c820 - <Box<S> as futures::stream::Stream>::poll::hbe60631b02667eb8
15: 0x107454582 - <futures::stream::and_then::AndThen<S, F, U> as futures::stream::Stream>::poll::h8c0ac950d7328286
16: 0x10748c860 - <Box<S> as futures::stream::Stream>::poll::hfa402fefaf618f38
17: 0x1074aa73b - <futures::stream::map::Map<S, F> as futures::stream::Stream>::poll::h6d118c382818bb98
18: 0x1074a98f3 - <futures::stream::flatten::Flatten<S> as futures::stream::Stream>::poll::h35c231ddc73bb119
19: 0x10748c7e0 - <Box<S> as futures::stream::Stream>::poll::h768c6509e58ee796
20: 0x10748c7e0 - <Box<S> as futures::stream::Stream>::poll::h768c6509e58ee796
21: 0x107453521 - <futures::stream::and_then::AndThen<S, F, U> as futures::stream::Stream>::poll::h6dbbe69f89e6466d
22: 0x107541d30 - <Box<S> as futures::stream::Stream>::poll::hbe60631b02667eb8
23: 0x107574b6b - <futures::stream::map::Map<S, F> as futures::stream::Stream>::poll::h1d05ccecc34a947d
24: 0x10757e15d - <futures::stream::then::Then<S, F, U> as futures::stream::Stream>::poll::h66c0dc49ca0cc677
25: 0x10758edd5 - <grpc::futures_misc::stream_concat::Concat<S1, S2> as futures::stream::Stream>::poll::hf21c768e0339297a
26: 0x10758dd01 - <grpc::futures_misc::stream_concat::Concat<S1, S2> as futures::stream::Stream>::poll::h50449c6c191ee722
27: 0x10759014b - <grpc::futures_misc::stream_concat3::Concat3<S1, S2, S3> as futures::stream::Stream>::poll::heb8ae2092ce37e85
28: 0x107541cb0 - <Box<S> as futures::stream::Stream>::poll::h99583395fd082fa9
29: 0x10757bd5a - <futures::stream::for_each::ForEach<S, F> as futures::future::Future>::poll::h4df34ab063428f94
30: 0x107551317 - <futures::future::chain::Chain<A, B, C>>::poll::hd96363bfc990cb52
31: 0x1074c320b - <futures::future::and_then::AndThen<A, B, F> as futures::future::Future>::poll::h3841d17e232c31d3
32: 0x10757a78a - <futures::future::map_err::MapErr<A, F> as futures::future::Future>::poll::he880d6081e7a3dac
33: 0x107762981 - <Box<F> as futures::future::Future>::poll::hdcde478ef4e8da40
34: 0x1077797fc - <futures::task_impl::Spawn<F>>::poll_future::{{closure}}::h4593987aece2335f
35: 0x10777984e - <futures::task_impl::Spawn<T>>::enter::{{closure}}::h96233ed4af8f7a98
36: 0x107779965 - futures::task_impl::set::{{closure}}::h06a53b1d516ec9fe
37: 0x107755694 - <std::thread::local::LocalKey<T>>::with::hafd993f9e3933e97
38: 0x1077685d7 - futures::task_impl::set::hd0fa5ec781774660
39: 0x107754d4c - <futures::task_impl::Spawn<T>>::enter::haa5fa2f5d202f777
40: 0x107754b92 - <futures::task_impl::Spawn<F>>::poll_future::h0ccf585be6916a7e
41: 0x107779446 - tokio_core::reactor::Core::dispatch_task::{{closure}}::h80049e866b2a20c1
42: 0x107751e0e - <scoped_tls::ScopedKey<T>>::set::h4537c6755a99f191
43: 0x10777409f - tokio_core::reactor::Core::dispatch_task::he97843a353c5112d
44: 0x107773308 - tokio_core::reactor::Core::dispatch::h756d49fd8a309683
45: 0x107772f1b - tokio_core::reactor::Core::poll::hb80b0fedd628e39d
46: 0x1074c8437 - tokio_core::reactor::Core::run::h7f6313bcbc91d331
47: 0x10758340b - grpc::server::run_server_event_loop::h76e03d25a0f0cd66
48: 0x10759dd68 - grpc::server::GrpcServer::new::{{closure}}::hcd41d52da0bae7d4
49: 0x107577dbb - <std::panic::AssertUnwindSafe<F> as core::ops::FnOnce<()>>::call_once::h5c9d794b2db5435f
50: 0x1074e3d16 - std::panicking::try::do_call::h39ac82e24b244e58
51: 0x1078e9d0a - __rust_maybe_catch_panic
52: 0x1074e39a0 - std::panicking::try::he0cef71b38587938
53: 0x1074e2c05 - std::panic::catch_unwind::h29077e42a5630281
54: 0x10759a37d - std::thread::Builder::spawn::{{closure}}::hd0e2341b25be272b
55: 0x107534850 - <F as alloc::boxed::FnBox<A>>::call_box::h4a3944545481bfc9
56: 0x1078e7f34 - std::sys::thread::Thread::new::thread_start::h759e10bc4abc7e72
57: 0x7fffce7f7aba - _pthread_body
58: 0x7fffce7f7a06 - _pthread_start