mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 05:49:27 +00:00
Bluetooth: Sleep instead of dying on EOF
When a device is restarted, the UART may go away before the packetizer. Print an error and sleep in case it isn't really a restart. Bug: 70855323 Test: Repeated restarts, check for Bluetooth tombstones Change-Id: I2b4e677451e826d40dcc9d063d80dc0e17fc9aca
This commit is contained in:
@@ -71,8 +71,10 @@ void H4Protocol::OnDataReady(int fd) {
|
||||
ssize_t bytes_read = TEMP_FAILURE_RETRY(read(fd, buffer, 1));
|
||||
if (bytes_read != 1) {
|
||||
if (bytes_read == 0) {
|
||||
LOG_ALWAYS_FATAL("%s: Unexpected EOF reading the packet type!",
|
||||
__func__);
|
||||
// This is only expected if the UART got closed when shutting down.
|
||||
ALOGE("%s: Unexpected EOF reading the packet type!", __func__);
|
||||
sleep(5); // Expect to be shut down within 5 seconds.
|
||||
return;
|
||||
} else if (bytes_read < 0) {
|
||||
LOG_ALWAYS_FATAL("%s: Read packet type error: %s", __func__,
|
||||
strerror(errno));
|
||||
|
||||
@@ -56,9 +56,13 @@ void HciPacketizer::OnDataReady(int fd, HciPacketType packet_type) {
|
||||
ssize_t bytes_read = TEMP_FAILURE_RETRY(
|
||||
read(fd, preamble_ + bytes_read_,
|
||||
preamble_size_for_type[packet_type] - bytes_read_));
|
||||
if (bytes_read <= 0) {
|
||||
LOG_ALWAYS_FATAL_IF((bytes_read == 0),
|
||||
"%s: Unexpected EOF reading the header!", __func__);
|
||||
if (bytes_read == 0) {
|
||||
// This is only expected if the UART got closed when shutting down.
|
||||
ALOGE("%s: Unexpected EOF reading the header!", __func__);
|
||||
sleep(5); // Expect to be shut down within 5 seconds.
|
||||
return;
|
||||
}
|
||||
if (bytes_read < 0) {
|
||||
LOG_ALWAYS_FATAL("%s: Read header error: %s", __func__,
|
||||
strerror(errno));
|
||||
}
|
||||
@@ -80,10 +84,13 @@ void HciPacketizer::OnDataReady(int fd, HciPacketType packet_type) {
|
||||
fd,
|
||||
packet_.data() + preamble_size_for_type[packet_type] + bytes_read_,
|
||||
bytes_remaining_));
|
||||
if (bytes_read <= 0) {
|
||||
LOG_ALWAYS_FATAL_IF((bytes_read == 0),
|
||||
"%s: Unexpected EOF reading the payload!",
|
||||
__func__);
|
||||
if (bytes_read == 0) {
|
||||
// This is only expected if the UART got closed when shutting down.
|
||||
ALOGE("%s: Unexpected EOF reading the payload!", __func__);
|
||||
sleep(5); // Expect to be shut down within 5 seconds.
|
||||
return;
|
||||
}
|
||||
if (bytes_read < 0) {
|
||||
LOG_ALWAYS_FATAL("%s: Read payload error: %s", __func__,
|
||||
strerror(errno));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user