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(); |