cec: safe deletes for members
authorLars Op den Kamp <lars@opdenkamp.eu>
Thu, 31 May 2012 19:50:48 +0000 (21:50 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Thu, 31 May 2012 21:09:29 +0000 (23:09 +0200)
src/lib/CECProcessor.cpp
src/lib/LibCEC.cpp
src/lib/adapter/USBCECAdapterCommands.cpp
src/lib/adapter/USBCECAdapterCommunication.cpp
src/lib/devices/CECBusDevice.cpp
src/lib/implementations/CECCommandHandler.cpp
src/lib/platform/util/util.h [new file with mode: 0644]

index 3bfa061548c0e4b74d4811e7296790a6849b2630..016d88c8e517933129ad120fe19c8661a28c83f7 100644 (file)
@@ -43,6 +43,7 @@
 #include "LibCEC.h"
 #include "CECClient.h"
 #include "platform/util/timeutils.h"
+#include "platform/util/util.h"
 
 using namespace CEC;
 using namespace std;
@@ -66,7 +67,7 @@ CCECProcessor::CCECProcessor(CLibCEC *libcec) :
 CCECProcessor::~CCECProcessor(void)
 {
   Close();
-  delete m_busDevices;
+  DELETE_AND_NULL(m_busDevices);
 }
 
 bool CCECProcessor::Start(const char *strPort, uint16_t iBaudRate /* = CEC_SERIAL_DEFAULT_BAUDRATE */, uint32_t iTimeoutMs /* = CEC_DEFAULT_CONNECT_TIMEOUT */)
@@ -98,21 +99,13 @@ void CCECProcessor::Close(void)
   StopThread();
 
   // close the connection
-  if (m_communication)
-  {
-    delete m_communication;
-    m_communication = NULL;
-  }
+  DELETE_AND_NULL(m_communication);
 }
 
 void CCECProcessor::ResetMembers(void)
 {
   // close the connection
-  if (m_communication)
-  {
-    delete m_communication;
-    m_communication = NULL;
-  }
+  DELETE_AND_NULL(m_communication);
 
   // reset the other members to the initial state
   m_iStandardLineTimeout = 3;
@@ -517,7 +510,7 @@ bool CCECProcessor::StartBootloader(const char *strPort /* = NULL */)
     if (comm->IsOpen())
     {
       bReturn = comm->StartBootloader();
-      delete comm;
+      DELETE_AND_NULL(comm);
     }
     return bReturn;
   }
index b64cdc709ad6ab22f7a7eb17dac3c2d264e24896..b5dc74da2cfd7c0cd1d85989d356b10fa5612966 100644 (file)
@@ -41,6 +41,7 @@
 #include "devices/CECTV.h"
 #include "platform/util/timeutils.h"
 #include "platform/util/StdString.h"
+#include "platform/util/util.h"
 
 #include "CECClient.h"
 
@@ -48,6 +49,7 @@ using namespace std;
 using namespace CEC;
 using namespace PLATFORM;
 
+//TODO replace deprecated constructor in 2.0
 CLibCEC::CLibCEC(const char *UNUSED(strDeviceName), cec_device_type_list UNUSED(types), uint16_t UNUSED(iPhysicalAddress) /* = 0 */) :
     m_iStartTime(GetTimeMs()),
     m_client(NULL)
@@ -55,6 +57,7 @@ CLibCEC::CLibCEC(const char *UNUSED(strDeviceName), cec_device_type_list UNUSED(
   m_cec = new CCECProcessor(this);
 }
 
+//TODO replace deprecated constructor in 2.0
 CLibCEC::CLibCEC(libcec_configuration *UNUSED(configuration)) :
     m_iStartTime(GetTimeMs()),
     m_client(NULL)
@@ -68,8 +71,7 @@ CLibCEC::~CLibCEC(void)
   UnregisterClients();
 
   // delete the adapter connection
-  delete m_cec;
-  m_cec = NULL;
+  DELETE_AND_NULL(m_cec);
 }
 
 bool CLibCEC::Open(const char *strPort, uint32_t iTimeoutMs /* = CEC_DEFAULT_CONNECT_TIMEOUT */)
@@ -932,8 +934,7 @@ void CLibCEC::UnregisterClients(void)
 
   m_clients.clear();
 
-  delete m_client;
-  m_client = NULL;
+  DELETE_AND_NULL(m_client);
 }
 
 void * CECInitialise(libcec_configuration *configuration)
@@ -996,7 +997,7 @@ bool CECStartBootloader(void)
 
 void CECDestroy(CEC::ICECAdapter *instance)
 {
-  delete instance;
+  DELETE_AND_NULL(instance);
 }
 
 bool CLibCEC::GetDeviceInformation(const char *strPort, libcec_configuration *config, uint32_t iTimeoutMs /* = CEC_DEFAULT_CONNECT_TIMEOUT */)
index bdc24126f7a2b2099205d07b7a58ee2385a14e14..87a91e91e7e6a4a912f5cc10046e997ad1d4d65c 100644 (file)
@@ -65,6 +65,7 @@ cec_datapacket CUSBCECAdapterCommands::RequestSetting(cec_adapter_messagecode ms
     retVal.Shift(2); // shift out start and msgcode
     retVal.size -= 1; // remove end
   }
+
   delete message;
   return retVal;
 }
index 801ebc509550fda47fe1b80dff0dce9cca77befc..33eb26080081f467f572450db4f0860a511fc0ae 100644 (file)
@@ -35,6 +35,7 @@
 #include "USBCECAdapterMessageQueue.h"
 #include "../platform/sockets/serialport.h"
 #include "../platform/util/timeutils.h"
+#include "../platform/util/util.h"
 #include "../LibCEC.h"
 #include "../CECProcessor.h"
 
@@ -70,9 +71,9 @@ CUSBCECAdapterCommunication::CUSBCECAdapterCommunication(IAdapterCommunicationCa
 CUSBCECAdapterCommunication::~CUSBCECAdapterCommunication(void)
 {
   Close();
-  delete m_commands;
-  delete m_adapterMessageQueue;
-  delete m_port;
+  DELETE_AND_NULL(m_commands);
+  DELETE_AND_NULL(m_adapterMessageQueue);
+  DELETE_AND_NULL(m_port);
 }
 
 bool CUSBCECAdapterCommunication::Open(uint32_t iTimeoutMs /* = CEC_DEFAULT_CONNECT_TIMEOUT */, bool bSkipChecks /* = false */, bool bStartListening /* = true */)
@@ -195,10 +196,7 @@ void CUSBCECAdapterCommunication::Close(void)
   m_adapterMessageQueue->Clear();
 
   /* stop and delete the ping thread */
-  if (m_pingThread)
-    m_pingThread->StopThread(0);
-  delete m_pingThread;
-  m_pingThread = NULL;
+  DELETE_AND_NULL(m_pingThread);
 
   /* close and delete the com port connection */
   if (m_port)
index b192391906607f0da79ea1cb377aa3aa375256b5..3377960993531ed674a5dd21b7c28873c2f68276 100644 (file)
@@ -38,6 +38,7 @@
 #include "../implementations/VLCommandHandler.h"
 #include "../LibCEC.h"
 #include "../platform/util/timeutils.h"
+#include "../platform/util/util.h"
 
 #include "CECAudioSystem.h"
 #include "CECPlaybackDevice.h"
@@ -83,7 +84,7 @@ CCECBusDevice::CCECBusDevice(CCECProcessor *processor, cec_logical_address iLogi
 
 CCECBusDevice::~CCECBusDevice(void)
 {
-  delete m_handler;
+  DELETE_AND_NULL(m_handler);
 }
 
 bool CCECBusDevice::ReplaceHandler(bool bActivateSource /* = true */)
@@ -105,7 +106,7 @@ bool CCECBusDevice::ReplaceHandler(bool bActivateSource /* = true */)
       if (CCECCommandHandler::HasSpecificHandler(m_vendor))
       {
         LIB_CEC->AddLog(CEC_LOG_DEBUG, "replacing the command handler for device '%s' (%x)", GetLogicalAddressName(), GetLogicalAddress());
-        delete m_handler;
+        DELETE_AND_NULL(m_handler);
 
         switch (m_vendor)
         {
index 40d7ec37425a26ded517d2c96f3829c2a62ccb8b..376cfc42bfb5a5d6b21a18e617908b212a8c6e46 100644 (file)
@@ -37,6 +37,7 @@
 #include "../CECClient.h"
 #include "../CECProcessor.h"
 #include "../LibCEC.h"
+#include "../platform/util/util.h"
 
 using namespace CEC;
 using namespace std;
@@ -60,7 +61,7 @@ CCECCommandHandler::CCECCommandHandler(CCECBusDevice *busDevice) :
 
 CCECCommandHandler::~CCECCommandHandler(void)
 {
-  delete m_waitForResponse;
+  DELETE_AND_NULL(m_waitForResponse);
 }
 
 bool CCECCommandHandler::HandleCommand(const cec_command &command)
diff --git a/src/lib/platform/util/util.h b/src/lib/platform/util/util.h
new file mode 100644 (file)
index 0000000..2b85c63
--- /dev/null
@@ -0,0 +1,34 @@
+#pragma once
+/*
+ * This file is part of the libCEC(R) library.
+ *
+ * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited.  All rights reserved.
+ * libCEC(R) is an original work, containing original code.
+ *
+ * libCEC(R) is a trademark of Pulse-Eight Limited.
+ *
+ * This program is dual-licensed; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * Alternatively, you can license this library under a commercial license,
+ * please contact Pulse-Eight Licensing for more information.
+ *
+ * For more information contact:
+ * Pulse-Eight Licensing       <license@pulse-eight.com>
+ *     http://www.pulse-eight.com/
+ *     http://www.pulse-eight.net/
+ */
+
+#define DELETE_AND_NULL(t) while (t) { delete (t); (t) = NULL; }