message: TCP tun poll_* may wake the same task when replacing waker
diff: @@ -112,8 +112,10 @@ impl AsyncRead for TcpConnection {
  if control.recv_buffer.is_empty() {
  // Nothing could be read. Wait for notify.
  if let Some(old_waker) = control.recv_waker.replace(cx.waker().clone()) {
  + if !old_waker.will_wake(cx.waker()) {
  old_waker.wake();
  }
  + }
  return Poll::Pending;
  }
  @@ -138,8 +140,10 @@ impl AsyncWrite for TcpConnection {
  if control.send_buffer.is_full() {
  if let Some(old_waker) = control.send_waker.replace(cx.waker().clone()) {
  + if !old_waker.will_wake(cx.waker()) {
  old_waker.wake();
  }
  + }
  return Poll::Pending;
  }
  @@ -163,8 +167,10 @@ impl AsyncWrite for TcpConnection {
  control.is_closed = true;
  if let Some(old_waker) = control.send_waker.replace(cx.waker().clone()) {
  + if !old_waker.will_wake(cx.waker()) {
  old_waker.wake();
  }
  + }
  Poll::Pending
  }
  