From 98af219bfa82f3c33646db344bba73dd92e540b4 Mon Sep 17 00:00:00 2001
From: Jack Thomasson <jkt@moonlitsw.com>
Date: Thu, 6 Sep 2012 18:02:58 -0600
Subject: [PATCH] lock CC708Window::text

the race ended in tragedy when CC708Reader::DisplayWindows wiped out text
underneath GetStrings
---
 mythtv/libs/libmythtv/cc708reader.cpp |    1 +
 mythtv/libs/libmythtv/cc708window.cpp |   12 +++++++-----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/mythtv/libs/libmythtv/cc708reader.cpp b/mythtv/libs/libmythtv/cc708reader.cpp
index 2233a6d..49221cf 100644
--- a/mythtv/libs/libmythtv/cc708reader.cpp
+++ b/mythtv/libs/libmythtv/cc708reader.cpp
@@ -117,6 +117,7 @@ void CC708Reader::DisplayWindows(uint service_num, int window_map)
         if ((1 << i) & CC708DelayedDeletes[service_num & 63])
         {
             CC708Window &win = GetCCWin(service_num, i);
+            QMutexLocker locker(&win.lock);
 
             win.exists  = false;
             win.changed = true;
diff --git a/mythtv/libs/libmythtv/cc708window.cpp b/mythtv/libs/libmythtv/cc708window.cpp
index 5a3870c..f3b8c80 100644
--- a/mythtv/libs/libmythtv/cc708window.cpp
+++ b/mythtv/libs/libmythtv/cc708window.cpp
@@ -231,7 +231,6 @@ void CC708Window::Clear(void)
 
 CC708Character &CC708Window::GetCCChar(void) const
 {
-    QMutexLocker locker(&lock);
     assert(exists);
     assert(text);
     assert(pen.row    < true_row_count);
@@ -338,18 +337,21 @@ void CC708Window::AddChar(QChar ch)
         changed = true;
         return;
     }
+    QMutexLocker locker(&lock);
 
     if (ch.toAscii() == 0x08)
     {
         DecrPenLocation();
-        GetCCChar().attr      = pen.attr;
-        GetCCChar().character = QChar(' ');
+        CC708Character& chr = GetCCChar();
+        chr.attr      = pen.attr;
+        chr.character = QChar(' ');
         changed = true;
         return;
     }
 
-    GetCCChar().attr      = pen.attr;
-    GetCCChar().character = ch;
+    CC708Character& chr = GetCCChar();
+    chr.attr      = pen.attr;
+    chr.character = ch;
     int c = pen.column;
     int r = pen.row;
     IncrPenLocation();
-- 
1.7.7

