Ticket #892: dvbdiff.2

File dvbdiff.2, 4.0 KB (added by nooneimprt4nt@…, 20 years ago)

Fist try got corrupted. Try again.

Line 
1Index: libs/libmythtv/eithelper.h
2===================================================================
3--- libs/libmythtv/eithelper.h (revision 8390)
4+++ libs/libmythtv/eithelper.h (working copy)
5@@ -28,6 +28,8 @@
6
7 public slots:
8 void HandleEITs(QMap_Events* events);
9+ signals:
10+ void StopParsing(bool);
11
12 private:
13 int GetChanID(int tid_db, const Event &event) const;
14Index: libs/libmythtv/siparser.cpp
15===================================================================
16--- libs/libmythtv/siparser.cpp (revision 8390)
17+++ libs/libmythtv/siparser.cpp (working copy)
18@@ -64,6 +64,8 @@
19 ParserInReset(false), standardChange(false),
20 PrivateTypesLoaded(false)
21 {
22+ events_full = false;
23+
24 /* Set the PrivateTypes to default values */
25 PrivateTypes.reset();
26
27Index: libs/libmythtv/eithelper.cpp
28===================================================================
29--- libs/libmythtv/eithelper.cpp (revision 8390)
30+++ libs/libmythtv/eithelper.cpp (working copy)
31@@ -75,35 +75,39 @@
32 if (!eitList.size())
33 return 0;
34
35+ VERBOSE(VB_EIT,QString("EITHelper::ProcessEvents: Events: %1/%2")
36+ .arg(eitList.size()).arg(eitList.front()->size()));
37+
38 uint insertCount = 0;
39- if (eitList.front()->size() <= kChunkSize)
40+
41+ QList_Events subset;
42+ while (subset.size() < kChunkSize && eitList.size())
43 {
44 QList_Events *events = eitList.front();
45- eitList.pop_front();
46+ while (subset.size() < kChunkSize && events->size())
47+ {
48+ subset.push_back(events->front());
49+ events->pop_front();
50+ }
51+ if (! events->size())
52+ {
53+ eitList.pop_front();
54+ delete events;
55+ }
56+ }
57
58- eitList_lock.unlock();
59- insertCount += UpdateEITList(mplexid, *events);
60- QList_Events::iterator it = events->begin();
61- for (; it != events->end(); ++it)
62- delete *it;
63- delete events;
64- eitList_lock.lock();
65- }
66- else
67+ eitList_lock.unlock();
68+ insertCount += UpdateEITList(mplexid, subset);
69+ QList_Events::iterator it = subset.begin();
70+ for (; it != subset.end(); ++it)
71+ delete *it;
72+ eitList_lock.lock();
73+
74+ if (eitList.size() <= 20 || eitList.size() > 1000)
75 {
76- QList_Events *events = eitList.front();
77- QList_Events subset;
78-
79- QList_Events::iterator subset_end = events->begin();
80- for (uint i = 0; i < kChunkSize; ++i) ++subset_end;
81- subset.insert(subset.end(), events->begin(), subset_end);
82- events->erase(events->begin(), subset_end);
83-
84+ int size = eitList.size();
85 eitList_lock.unlock();
86- insertCount += UpdateEITList(mplexid, subset);
87- QList_Events::iterator it = subset.begin();
88- for (; it != subset.end(); ++it)
89- delete *it;
90+ emit(StopParsing(size > 1000));
91 eitList_lock.lock();
92 }
93
94Index: libs/libmythtv/eitscanner.cpp
95===================================================================
96--- libs/libmythtv/eitscanner.cpp (revision 8390)
97+++ libs/libmythtv/eitscanner.cpp (working copy)
98@@ -176,6 +176,8 @@
99 eitHelper, SLOT(HandleEITs(QMap_Events*)));
100 connect(channel, SIGNAL(UpdatePMTObject(const PMTObject *)),
101 this, SLOT(SetPMTObject(const PMTObject *)));
102+ connect(eitHelper, SIGNAL(StopParsing(bool)),
103+ parser, SLOT(StopParsing(bool)));
104 }
105
106 /** \fn EITScanner::StopPassiveScan(void)
107Index: libs/libmythtv/siparser.h
108===================================================================
109--- libs/libmythtv/siparser.h (revision 8390)
110+++ libs/libmythtv/siparser.h (working copy)
111@@ -111,6 +111,8 @@
112
113 public slots:
114 virtual void deleteLater(void);
115+ void StopParsing(bool stop)
116+ { pmap_lock.lock(); events_full = stop; pmap_lock.unlock(); }
117
118 signals:
119 void FindTransportsComplete(void);
120@@ -279,6 +281,8 @@
121 // statistics
122 QMap<uint,uint> descCount;
123 mutable QMutex descLock;
124+
125+ bool events_full;
126 };
127
128 #endif // SIPARSER_H