summaryrefslogtreecommitdiffstats
path: root/abs/core-testing/mythtv/trunk/mythtv-svn/DeviceReadBuffer-polltimeout.2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core-testing/mythtv/trunk/mythtv-svn/DeviceReadBuffer-polltimeout.2.patch')
-rw-r--r--abs/core-testing/mythtv/trunk/mythtv-svn/DeviceReadBuffer-polltimeout.2.patch219
1 files changed, 0 insertions, 219 deletions
diff --git a/abs/core-testing/mythtv/trunk/mythtv-svn/DeviceReadBuffer-polltimeout.2.patch b/abs/core-testing/mythtv/trunk/mythtv-svn/DeviceReadBuffer-polltimeout.2.patch
deleted file mode 100644
index 5bb713f..0000000
--- a/abs/core-testing/mythtv/trunk/mythtv-svn/DeviceReadBuffer-polltimeout.2.patch
+++ /dev/null
@@ -1,219 +0,0 @@
-Index: libs/libmythtv/DeviceReadBuffer.h
-===================================================================
---- libs/libmythtv/DeviceReadBuffer.h (revision 18515)
-+++ libs/libmythtv/DeviceReadBuffer.h (working copy)
-@@ -59,7 +59,7 @@
- void IncrReadPointer(uint len);
-
- bool HandlePausing(void);
-- bool Poll(void) const;
-+ bool Poll(void);
- uint WaitForUnused(uint bytes_needed) const;
- uint WaitForUsed (uint bytes_needed) const;
-
-Index: libs/libmythtv/DeviceReadBuffer.cpp
-===================================================================
---- libs/libmythtv/DeviceReadBuffer.cpp (revision 18515)
-+++ libs/libmythtv/DeviceReadBuffer.cpp (working copy)
-@@ -90,9 +90,14 @@
-
- void DeviceReadBuffer::Start(void)
- {
-- lock.lock();
-- bool was_running = running;
-- lock.unlock();
-+ bool was_running;
-+
-+ {
-+ QMutexLocker locker(&lock);
-+ was_running = running;
-+ error = false;
-+ }
-+
- if (was_running)
- {
- VERBOSE(VB_IMPORTANT, LOC_ERR + "Start(): Already running.");
-@@ -104,6 +109,8 @@
- {
- VERBOSE(VB_IMPORTANT,
- LOC_ERR + QString("Start(): pthread_create failed.") + ENO);
-+
-+ QMutexLocker locker(&lock);
- error = true;
- }
- }
-@@ -118,21 +125,25 @@
- used = 0;
- readPtr = buffer;
- writePtr = buffer;
-+
-+ error = false;
- }
-
- void DeviceReadBuffer::Stop(void)
- {
- bool was_running = IsRunning();
-- lock.lock();
-- run = false;
-- lock.unlock();
-
- if (!was_running)
- {
-- VERBOSE(VB_IMPORTANT, LOC_ERR + "Stop(): Not running.");
-+ VERBOSE(VB_IMPORTANT, LOC + "Stop(): Not running.");
- return;
- }
-
-+ {
-+ QMutexLocker locker(&lock);
-+ run = false;
-+ }
-+
- pthread_join(thread, NULL);
- }
-
-@@ -229,10 +240,11 @@
- {
- uint errcnt = 0;
-
-- lock.lock();
-- run = true;
-- running = true;
-- lock.unlock();
-+ {
-+ QMutexLocker locker(&lock);
-+ run = true;
-+ running = true;
-+ }
-
- while (run)
- {
-@@ -248,6 +260,15 @@
- if (using_poll && !Poll())
- continue;
-
-+ {
-+ QMutexLocker locker(&lock);
-+ if (error)
-+ {
-+ VERBOSE(VB_RECORD, LOC + "fill_ringbuffer: error state");
-+ break;
-+ }
-+ }
-+
- // Limit read size for faster return from read
- size_t read_size =
- min(dev_read_size, (size_t) WaitForUnused(TSPacket::SIZE));
-@@ -268,9 +289,10 @@
- }
- }
-
-- lock.lock();
-- running = false;
-- lock.unlock();
-+ {
-+ QMutexLocker locker(&lock);
-+ running = false;
-+ }
- }
-
- bool DeviceReadBuffer::HandlePausing(void)
-@@ -293,7 +315,7 @@
- return true;
- }
-
--bool DeviceReadBuffer::Poll(void) const
-+bool DeviceReadBuffer::Poll(void)
- {
- #ifdef USING_MINGW
- #warning mingw DeviceReadBuffer::Poll
-@@ -302,31 +324,53 @@
- return false;
- #else
- bool retval = true;
-- while (true)
-+ uint timeout_cnt = 0;
-+
-+ for (;;)
- {
- struct pollfd polls;
- polls.fd = _stream_fd;
- polls.events = POLLIN;
- polls.revents = 0;
-
-- int ret = poll(&polls, 1 /*number of polls*/, 10 /*msec*/);
-- if (IsPauseRequested() || !IsOpen() || !run)
-+ int ret = poll(&polls, 1 /*number of polls*/, 250 /*msec*/);
-+
-+ if (polls.revents & (POLLERR | POLLHUP | POLLNVAL))
- {
-+ VERBOSE(VB_IMPORTANT, LOC + "poll error");
-+ error = true;
-+ return true;
-+ }
-+
-+ if (!run || !IsOpen() || IsPauseRequested())
-+ {
- retval = false;
- break; // are we supposed to pause, stop, etc.
- }
-
- if (ret > 0)
- break; // we have data to read :)
-- if ((-1 == ret) && (EOVERFLOW == errno))
-- break; // we have an error to handle
--
-- if ((-1 == ret) && ((EAGAIN == errno) || (EINTR == errno)))
-- continue; // errors that tell you to try again
-- if (ret == 0)
-- continue; // timed out, try again
--
-- usleep(2500);
-+ if (ret < 0)
-+ {
-+ if ((EOVERFLOW == errno))
-+ break; // we have an error to handle
-+ if ((EAGAIN == errno) || (EINTR == errno))
-+ continue; // errors that tell you to try again
-+ usleep(2500);
-+ }
-+ else // ret == 0
-+ {
-+ if (++timeout_cnt > 9)
-+ {
-+ VERBOSE(VB_RECORD, LOC_ERR + "Poll giving up");
-+ QMutexLocker locker(&lock);
-+ error = true;
-+ return true;
-+ }
-+ if (timeout_cnt % 2)
-+ VERBOSE(VB_RECORD, LOC_ERR + QString("Poll timeout (%1)")
-+ .arg(timeout_cnt));
-+ }
- }
- return retval;
- #endif //!USING_MINGW
-@@ -360,9 +404,9 @@
-
- if (++errcnt > 5)
- {
-- lock.lock();
-+ QMutexLocker locker(&lock);
-+ VERBOSE(VB_RECORD, LOC + "Too many errors.");
- error = true;
-- lock.unlock();
- return false;
- }
-
-@@ -376,10 +420,8 @@
- VERBOSE(VB_IMPORTANT, LOC +
- QString("End-Of-File? fd(%1)").arg(_stream_fd));
-
-- lock.lock();
-+ QMutexLocker locker(&lock);
- eof = true;
-- lock.unlock();
--
- return false;
- }
- usleep(500);