[Libguestfs] [nbdkit PATCH v2] server: Don't assert on send if client hangs up early

Laszlo Ersek lersek at redhat.com
Sun Feb 26 09:16:08 UTC 2023


On 2/24/23 23:59, Eric Blake wrote:
> @@ -752,14 +742,15 @@ protocol_recv_request_send_reply (void)
>        (cmd == NBD_CMD_READ || cmd == NBD_CMD_BLOCK_STATUS)) {
>      if (!error) {
>        if (cmd == NBD_CMD_READ)
> -        send_structured_reply_read (request.handle, cmd, buf, count, offset);
> +        return send_structured_reply_read (request.handle, cmd, buf, count,
> +                                           offset);
>        else /* NBD_CMD_BLOCK_STATUS */
> -        send_structured_reply_block_status (request.handle, cmd, flags,
> -                                            count, offset, extents);
> +        return send_structured_reply_block_status (request.handle, cmd, flags,
> +                                                   count, offset, extents);
>      }
>      else
> -      send_structured_reply_error (request.handle, cmd, flags, error);
> +      return send_structured_reply_error (request.handle, cmd, flags, error);
>    }
>    else
> -    send_simple_reply (request.handle, cmd, flags, buf, count, error);
> +    return send_simple_reply (request.handle, cmd, flags, buf, count, error);
>  }

I think this would look better:

  if (!conn->structured_replies ||
      (cmd != NBD_CMD_READ && cmd != NBD_CMD_BLOCK_STATUS))
    return send_simple_reply (request.handle, cmd, flags, buf, count, error);

  if (error) {
    return send_structured_reply_error (request.handle, cmd, flags, error);

  if (cmd == NBD_CMD_READ)
    return send_structured_reply_read (request.handle, cmd, buf, count, offset);

  /* NBD_CMD_BLOCK_STATUS */
  return send_structured_reply_block_status (request.handle, cmd, flags,
                                             count, offset, extents);

Either way:

Reviewed-by: Laszlo Ersek <lersek at redhat.com>


More information about the Libguestfs mailing list