diff --git a/libspark/record.cpp b/libspark/record.cpp index 334613a..3ed9ce3 100644 --- a/libspark/record.cpp +++ b/libspark/record.cpp @@ -244,37 +244,29 @@ void cRecord::RecordThread() while (exit_flag == RECORD_RUNNING) { - uint8_t *bufstart = io_buf[chunk]; - int left = readsize; - ssize_t len = 0; - while ((exit_flag == RECORD_RUNNING) && (left > 0)) { - int s = dmx->Read(bufstart, left, 50); - lt_debug("%s: Read chunk=%d size=%d\n", __func__, chunk, s); - if (s < 0) + ssize_t s = dmx->Read(io_buf[chunk], readsize, 50); + lt_debug("%s: Read chunk=%d size=%d\n", __func__, chunk, s); + if (s < 0) + { + if (errno != EAGAIN && (errno != EOVERFLOW || overflow_count > 63 /* arbitrary */)) { - if (errno != EAGAIN && (errno != EOVERFLOW || overflow_count > 63 /* arbitrary */)) - { - lt_info("%s: read failed: %m\n", __func__); - exit_flag = RECORD_FAILED_READ; - break; - } - if (!overflow_count) - lt_info("%s: dmx->Read(): %m\n", __func__); - overflow_count++; - continue; - } - len += s; - left -= s; - bufstart += s; - if (overflow_count) { - lt_info("%s: Overflow cleared after %d iterations\n", __func__, overflow_count); - overflow_count = 0; + lt_info("%s: read failed: %m\n", __func__); + exit_flag = RECORD_FAILED_READ; + break; } + if (!overflow_count) + lt_info("%s: dmx->Read(): %m\n", __func__); + overflow_count++; + continue; } - if (!len) + if (overflow_count) { + lt_info("%s: Overflow cleared after %d iterations\n", __func__, overflow_count); + overflow_count = 0; + } + if (!s) continue; - io_len[chunk] = len; + io_len[chunk] = s; sem_post(&sem); chunk++; chunk %= RECORD_WRITER_CHUNKS;