On Fri, 2005-10-07 at 21:31 -0400, Daniel Kristjansson wrote:
> On Sat, 2005-10-08 at 00:58 +0100, Stuart Auchterlonie wrote:
> > On Fri, Oct 07, 2005 at 02:23:11PM -0400, Daniel Kristjansson wrote:
> > > Thanks for looking at this.
> > > 
> > > However...
> > > Index: mythtv/libs/libmythtv/eithelper.cpp
<snip>
> > btw. This is the biggest leak of them all....
> I can imagine.

Try the attached patch, it should fix this leak and some others
without doing anything questionable.

-- Daniel
Index: libs/libmythtv/siparser.cpp
===================================================================
--- libs/libmythtv/siparser.cpp	(revision 7405)
+++ libs/libmythtv/siparser.cpp	(working copy)
@@ -41,24 +41,31 @@
  *  is also possible with this class if their specs are ever known.
  *
  */
-SIParser::SIParser(const char *name) : QObject(NULL, name)
+SIParser::SIParser(const char *name) :
+    QObject(NULL, name),
+    PAT_ready(false),               PMT_ready(false),
+    // Common Variables
+    SIStandard(SI_STANDARD_AUTO),
+    CurrentTransport(0),            RequestedServiceID(0),
+    RequestedTransportID(0),        NITPID(0),
+    // Mutex Locks
+    pmap_lock(false),
+    // State variables
+    ThreadRunning(false),           exitParserThread(false),
+    ParserInReset(false),           standardChange(false),
+    PrivateTypesLoaded(false)
 {
-    ThreadRunning = false;
-    standardChange = false;
-    SIStandard = SI_STANDARD_AUTO;
-
     /* Set the PrivateTypes to default values */
-    PrivateTypesLoaded = false;
     PrivateTypes.reset();
 
     /* Initialize the Table Handlers */
-    Table[PAT] = new PATHandler();
-    Table[PMT] = new PMTHandler();
-    Table[MGT] = new MGTHandler();
-    Table[STT] = new STTHandler();
-    Table[EVENTS] = new EventHandler();
+    Table[PAT]      = new PATHandler();
+    Table[PMT]      = new PMTHandler();
+    Table[MGT]      = new MGTHandler();
+    Table[STT]      = new STTHandler();
+    Table[EVENTS]   = new EventHandler();
     Table[SERVICES] = new ServiceHandler();
-    Table[NETWORK] = new NetworkHandler();
+    Table[NETWORK]  = new NetworkHandler();
 
     InitializeCategories();
 
@@ -79,6 +86,13 @@
 
 SIParser::~SIParser()
 {
+    pmap_lock.lock();
+    for (uint i = 0; i < NumHandlers; ++i)
+    {
+        if (Table[i])
+            delete Table[i];
+    }
+    pmap_lock.unlock();
 }
 
 void SIParser::deleteLater(void)
_______________________________________________
mythtv-dev mailing list
[email protected]
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev

Reply via email to