Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57e0882c authored by Keith Mok's avatar Keith Mok
Browse files

Fix EINTR handling

The return value of read will not be errno directly.
Fix it and use TEMP_FAILURE_RETRY for read/write

Test: Builds OK
Change-Id: Ic128156f881e2ce4609d9a66269405272291fbdc
parent a8c0faa1
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -325,8 +325,8 @@ public:
        }

        uint8_t readBuffer[AMIDI_PACKET_SIZE];
        ssize_t readCount = read(mPort->ufd, readBuffer, sizeof(readBuffer));
        if (readCount == EINTR || readCount < 1) {
        ssize_t readCount = TEMP_FAILURE_RETRY(read(mPort->ufd, readBuffer, sizeof(readBuffer)));
        if (readCount < 1) {
            return  AMEDIA_ERROR_UNKNOWN;
        }

@@ -407,7 +407,8 @@ ssize_t AMIDI_API AMidiInputPort_sendWithTimestamp(const AMidiInputPort *inputPo

        ssize_t numTransferBytes =
                AMIDI_makeSendBuffer(writeBuffer, data + numSent, blockSize, timestamp);
        ssize_t numWritten = write(((AMIDI_Port*)inputPort)->ufd, writeBuffer, numTransferBytes);
        ssize_t numWritten = TEMP_FAILURE_RETRY(write(((AMIDI_Port*)inputPort)->ufd, writeBuffer,
                                                      numTransferBytes));
        if (numWritten < 0) {
            break;  // error so bail out.
        }
@@ -430,7 +431,8 @@ media_status_t AMIDI_API AMidiInputPort_sendFlush(const AMidiInputPort *inputPor

    uint8_t opCode = AMIDI_OPCODE_FLUSH;
    ssize_t numTransferBytes = 1;
    ssize_t numWritten = write(((AMIDI_Port*)inputPort)->ufd, &opCode, numTransferBytes);
    ssize_t numWritten = TEMP_FAILURE_RETRY(write(((AMIDI_Port*)inputPort)->ufd, &opCode,
                                                  numTransferBytes));

    if (numWritten < numTransferBytes) {
        ALOGE("AMidiInputPort_flush Couldn't write MIDI flush. requested:%zd, written:%zd",