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
|
b
|
void CC708Reader::DisplayWindows(uint service_num, int window_map)
|
| 117 | 117 | if ((1 << i) & CC708DelayedDeletes[service_num & 63]) |
| 118 | 118 | { |
| 119 | 119 | CC708Window &win = GetCCWin(service_num, i); |
| | 120 | QMutexLocker locker(&win.lock); |
| 120 | 121 | |
| 121 | 122 | win.exists = false; |
| 122 | 123 | win.changed = true; |
diff --git a/mythtv/libs/libmythtv/cc708window.cpp b/mythtv/libs/libmythtv/cc708window.cpp
index 5a3870c..f3b8c80 100644
|
a
|
b
|
void CC708Window::Clear(void)
|
| 231 | 231 | |
| 232 | 232 | CC708Character &CC708Window::GetCCChar(void) const |
| 233 | 233 | { |
| 234 | | QMutexLocker locker(&lock); |
| 235 | 234 | assert(exists); |
| 236 | 235 | assert(text); |
| 237 | 236 | assert(pen.row < true_row_count); |
| … |
… |
void CC708Window::AddChar(QChar ch)
|
| 338 | 337 | changed = true; |
| 339 | 338 | return; |
| 340 | 339 | } |
| | 340 | QMutexLocker locker(&lock); |
| 341 | 341 | |
| 342 | 342 | if (ch.toAscii() == 0x08) |
| 343 | 343 | { |
| 344 | 344 | DecrPenLocation(); |
| 345 | | GetCCChar().attr = pen.attr; |
| 346 | | GetCCChar().character = QChar(' '); |
| | 345 | CC708Character& chr = GetCCChar(); |
| | 346 | chr.attr = pen.attr; |
| | 347 | chr.character = QChar(' '); |
| 347 | 348 | changed = true; |
| 348 | 349 | return; |
| 349 | 350 | } |
| 350 | 351 | |
| 351 | | GetCCChar().attr = pen.attr; |
| 352 | | GetCCChar().character = ch; |
| | 352 | CC708Character& chr = GetCCChar(); |
| | 353 | chr.attr = pen.attr; |
| | 354 | chr.character = ch; |
| 353 | 355 | int c = pen.column; |
| 354 | 356 | int r = pen.row; |
| 355 | 357 | IncrPenLocation(); |