diff --git a/mythtv/libs/libmythtv/eitscanner.cpp b/mythtv/libs/libmythtv/eitscanner.cpp
index 6135e08..80041d5 100644
a
|
b
|
void EITScanner::run(void) |
75 | 75 | static const float rt[] = { 0.0f, 0.2f, 0.4f, 0.6f, 0.8f, }; |
76 | 76 | |
77 | 77 | lock.lock(); |
78 | | exitThread = false; |
79 | 78 | |
80 | 79 | MythTimer t; |
81 | 80 | uint eitCount = 0; |
… |
… |
void EITScanner::run(void) |
149 | 148 | } |
150 | 149 | |
151 | 150 | lock.lock(); |
152 | | if (!exitThread) |
| 151 | if ((activeScan || activeScanStopped) && !exitThread) |
153 | 152 | exitThreadCond.wait(&lock, 400); // sleep up to 400 ms. |
| 153 | |
| 154 | if (!activeScan && !activeScanStopped) |
| 155 | { |
| 156 | activeScanStopped = true; |
| 157 | activeScanCond.wakeAll(); |
| 158 | } |
154 | 159 | } |
| 160 | activeScanStopped = true; |
| 161 | activeScanCond.wakeAll(); |
155 | 162 | lock.unlock(); |
156 | 163 | } |
157 | 164 | |
… |
… |
void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source) |
271 | 278 | // Add a little randomness to trigger time so multiple |
272 | 279 | // cards will have a staggered channel changing time. |
273 | 280 | activeScanTrigTime += random() % 29; |
| 281 | activeScanStopped = false; |
274 | 282 | activeScan = true; |
275 | 283 | } |
276 | 284 | } |
277 | 285 | |
278 | | void EITScanner::StopActiveScan() |
| 286 | void EITScanner::StopActiveScan(void) |
279 | 287 | { |
| 288 | QMutexLocker locker(&lock); |
| 289 | |
| 290 | activeScanStopped = false; |
280 | 291 | activeScan = false; |
281 | | rec = NULL; |
| 292 | exitThreadCond.wakeAll(); |
| 293 | |
| 294 | locker.unlock(); |
282 | 295 | StopPassiveScan(); |
| 296 | locker.relock(); |
| 297 | |
| 298 | while (!activeScan && !activeScanStopped) |
| 299 | activeScanCond.wait(&lock, 100); |
| 300 | |
| 301 | rec = NULL; |
283 | 302 | } |
diff --git a/mythtv/libs/libmythtv/eitscanner.h b/mythtv/libs/libmythtv/eitscanner.h
index 36dd4d9..3351aae 100644
a
|
b
|
class EITScanner : public QRunnable |
54 | 54 | |
55 | 55 | EITHelper *eitHelper; |
56 | 56 | MThread *eventThread; |
57 | | bool exitThread; |
58 | | QWaitCondition exitThreadCond; |
| 57 | volatile bool exitThread; |
| 58 | QWaitCondition exitThreadCond; // protected by lock |
59 | 59 | |
60 | 60 | TVRec *rec; |
61 | | bool activeScan; |
| 61 | volatile bool activeScan; |
| 62 | volatile bool activeScanStopped; // protected by lock |
| 63 | QWaitCondition activeScanCond; // protected by lock |
62 | 64 | QDateTime activeScanNextTrig; |
63 | 65 | uint activeScanTrigTime; |
64 | 66 | QStringList activeScanChannels; |