diff --git a/mythtv/programs/mythbackend/filetransfer.cpp b/mythtv/programs/mythbackend/filetransfer.cpp index 0e2de25..22357c1 100644 --- a/mythtv/programs/mythbackend/filetransfer.cpp +++ b/mythtv/programs/mythbackend/filetransfer.cpp @@ -6,8 +6,14 @@ #include "RingBuffer.h" #include "util.h" #include "mythsocket.h" +#include "mythverbose.h" #include "programinfo.h" +#include +#include +#include + + FileTransfer::FileTransfer(QString &filename, MythSocket *remote, bool usereadahead, int timeout_ms) : readthreadlive(true), readsLocked(false), @@ -121,29 +127,40 @@ int FileTransfer::RequestBlock(int size) if (!readthreadlive || !rbuffer) return -1; + MythTimer sr_timer; + sr_timer.start(); + + pid_t tid; + tid = syscall(SYS_gettid); + VERBOSE(VB_IMPORTANT, QString("Request thread tid = %1").arg(tid)); int tot = 0; int ret = 0; - QMutexLocker locker(&lock); - while (readsLocked) - readsUnlockedCond.wait(&lock, 100 /*ms*/); +// QMutexLocker locker(&lock); +// while (readsLocked) +// readsUnlockedCond.wait(&lock, 100 /*ms*/); - requestBuffer.resize(max((size_t)max(size,0) + 128, requestBuffer.size())); + //requestBuffer.resize(max((size_t)max(size,0) + 128, requestBuffer.size())); char *buf = &requestBuffer[0]; - while (tot < size && !rbuffer->GetStopReads() && readthreadlive) + //while (tot < size && !rbuffer->GetStopReads() && readthreadlive) + while (tot < size) { int request = size - tot; + VERBOSE(VB_IMPORTANT, QString("rbuffer->Read() -- end")); ret = rbuffer->Read(buf, request); + VERBOSE(VB_IMPORTANT, QString("rbuffer->Read() -- end")); if (rbuffer->GetStopReads() || ret <= 0) break; + VERBOSE(VB_IMPORTANT, QString("sock->writeData() -- begin")); if (!sock->writeData(buf, (uint)ret)) { tot = -1; break; } + VERBOSE(VB_IMPORTANT, QString("sock->writeData() -- end")); tot += ret; if (ret < request) @@ -153,6 +170,11 @@ int FileTransfer::RequestBlock(int size) if (pginfo) pginfo->UpdateInUseMark(); + int sr_elapsed = sr_timer.elapsed(); + + if (sr_elapsed > 150) { + VERBOSE(VB_IMPORTANT, QString("WARNING took %1 ms to process request_block").arg(sr_elapsed)); + } return (ret < 0) ? -1 : tot; } @@ -166,7 +188,7 @@ int FileTransfer::WriteBlock(int size) QMutexLocker locker(&lock); - requestBuffer.resize(max((size_t)max(size,0) + 128, requestBuffer.size())); + //requestBuffer.resize(max((size_t)max(size,0) + 128, requestBuffer.size())); char *buf = &requestBuffer[0]; while (tot < size) {