mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-04-09 08:21:08 -04:00
module-avb: fix ACMP error responses sent with wrong message type
In handle_connect_tx_command() and handle_disconnect_tx_command(), AVB_PACKET_ACMP_SET_MESSAGE_TYPE() is called after the goto done target. When find_stream() fails and jumps to done, the response is sent with the original command message type (e.g., CONNECT_TX_COMMAND) instead of the correct response type (CONNECT_TX_RESPONSE). Move the SET_MESSAGE_TYPE call before find_stream() so error responses are always sent with the correct response message type. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
1d0c51f057
commit
3f386ecd34
1 changed files with 4 additions and 3 deletions
|
|
@ -174,13 +174,14 @@ static int handle_connect_tx_command(struct acmp *acmp, uint64_t now, const void
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
memcpy(buf, m, len);
|
memcpy(buf, m, len);
|
||||||
|
AVB_PACKET_ACMP_SET_MESSAGE_TYPE(reply, AVB_ACMP_MESSAGE_TYPE_CONNECT_TX_RESPONSE);
|
||||||
|
|
||||||
stream = find_stream(server, SPA_DIRECTION_OUTPUT, ntohs(reply->talker_unique_id));
|
stream = find_stream(server, SPA_DIRECTION_OUTPUT, ntohs(reply->talker_unique_id));
|
||||||
if (stream == NULL) {
|
if (stream == NULL) {
|
||||||
status = AVB_ACMP_STATUS_TALKER_NO_STREAM_INDEX;
|
status = AVB_ACMP_STATUS_TALKER_NO_STREAM_INDEX;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVB_PACKET_ACMP_SET_MESSAGE_TYPE(reply, AVB_ACMP_MESSAGE_TYPE_CONNECT_TX_RESPONSE);
|
|
||||||
reply->stream_id = htobe64(stream->id);
|
reply->stream_id = htobe64(stream->id);
|
||||||
|
|
||||||
stream_activate(stream, ntohs(reply->talker_unique_id), now);
|
stream_activate(stream, ntohs(reply->talker_unique_id), now);
|
||||||
|
|
@ -251,14 +252,14 @@ static int handle_disconnect_tx_command(struct acmp *acmp, uint64_t now, const v
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
memcpy(buf, m, len);
|
memcpy(buf, m, len);
|
||||||
|
AVB_PACKET_ACMP_SET_MESSAGE_TYPE(reply, AVB_ACMP_MESSAGE_TYPE_DISCONNECT_TX_RESPONSE);
|
||||||
|
|
||||||
stream = find_stream(server, SPA_DIRECTION_OUTPUT, ntohs(reply->talker_unique_id));
|
stream = find_stream(server, SPA_DIRECTION_OUTPUT, ntohs(reply->talker_unique_id));
|
||||||
if (stream == NULL) {
|
if (stream == NULL) {
|
||||||
status = AVB_ACMP_STATUS_TALKER_NO_STREAM_INDEX;
|
status = AVB_ACMP_STATUS_TALKER_NO_STREAM_INDEX;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVB_PACKET_ACMP_SET_MESSAGE_TYPE(reply, AVB_ACMP_MESSAGE_TYPE_DISCONNECT_TX_RESPONSE);
|
|
||||||
|
|
||||||
stream_deactivate(stream, now);
|
stream_deactivate(stream, now);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue