From 2c302dc90ded65bdffa10ff306b8a8d38a92e999 Mon Sep 17 00:00:00 2001 From: satbaby Date: Sun, 21 Oct 2012 18:45:39 +0200 Subject: [PATCH] NeutrinoMessages fix memleak , ported from tuxbox cvs --- src/daemonc/remotecontrol.cpp | 20 ++++++++++---------- src/gui/infoviewer.cpp | 12 ++++++------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/daemonc/remotecontrol.cpp b/src/daemonc/remotecontrol.cpp index a9f1937a8..11e5373f9 100644 --- a/src/daemonc/remotecontrol.cpp +++ b/src/daemonc/remotecontrol.cpp @@ -298,8 +298,8 @@ int CRemoteControl::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data tuxtxt_start(current_PIDs.PIDs.vtxtpid); } #endif - t_channel_id * p = new t_channel_id; - *p = current_channel_id; + char *p = new char[sizeof(t_channel_id)]; + memcpy(p, ¤t_channel_id, sizeof(t_channel_id)); g_RCInput->postMsg(NeutrinoMessages::EVT_ZAP_GOTPIDS, (const neutrino_msg_data_t)p, false); processAPIDnames(); @@ -335,8 +335,8 @@ int CRemoteControl::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data { //printf("new program !\n"); - t_channel_id * p = new t_channel_id; - *p = current_channel_id; + char *p = new char[sizeof(t_channel_id)]; + memcpy(p, ¤t_channel_id, sizeof(t_channel_id)); g_RCInput->postMsg(NeutrinoMessages::EVT_NEXTPROGRAM, (const neutrino_msg_data_t)p, false); // data is pointer to allocated memory return messages_return::handled; @@ -382,8 +382,8 @@ void CRemoteControl::getSubChannels() } copySubChannelsToZapit(); - t_channel_id * p = new t_channel_id; - *p = current_channel_id; + char *p = new char[sizeof(t_channel_id)]; + memcpy(p, ¤t_channel_id, sizeof(t_channel_id)); g_RCInput->postMsg(NeutrinoMessages::EVT_ZAP_GOT_SUBSERVICES, (const neutrino_msg_data_t)p, false); // data is pointer to allocated memory } } @@ -424,8 +424,8 @@ void CRemoteControl::getNVODs() copySubChannelsToZapit(); - t_channel_id * p = new t_channel_id; - *p = current_channel_id; + char *p = new char[sizeof(t_channel_id)]; + memcpy(p, ¤t_channel_id, sizeof(t_channel_id)); g_RCInput->postMsg(NeutrinoMessages::EVT_ZAP_GOT_SUBSERVICES, (const neutrino_msg_data_t)p, false); // data is pointer to allocated memory if ( selected_subchannel == -1 ) @@ -570,8 +570,8 @@ void CRemoteControl::processAPIDnames() setAPID( 0 ); } - t_channel_id * p = new t_channel_id; - *p = current_channel_id; + char *p = new char[sizeof(t_channel_id)]; + memcpy(p, ¤t_channel_id, sizeof(t_channel_id)); g_RCInput->postMsg(NeutrinoMessages::EVT_ZAP_GOTAPIDS, (const neutrino_msg_data_t)p, false); // data is pointer to allocated memory } diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 0b6883847..5c5407530 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1273,16 +1273,16 @@ CSectionsdClient::CurrentNextInfo CInfoViewer::getEPG (const t_channel_id for_ch /* of there is no EPG, send an event so that parental lock can work */ if (info.current_uniqueKey == 0 && info.next_uniqueKey == 0) { oldinfo = info; - t_channel_id *p = new t_channel_id; - *p = for_channel_id; + char *p = new char[sizeof(t_channel_id)]; + memcpy(p, &for_channel_id, sizeof(t_channel_id)); g_RCInput->postMsg (NeutrinoMessages::EVT_NOEPG_YET, (const neutrino_msg_data_t) p, false); return info; } if (info.current_uniqueKey != oldinfo.current_uniqueKey || info.next_uniqueKey != oldinfo.next_uniqueKey) { if (info.flags & (CSectionsdClient::epgflags::has_current | CSectionsdClient::epgflags::has_next)) { - CSectionsdClient::CurrentNextInfo * _info = new CSectionsdClient::CurrentNextInfo; - *_info = info; + char *_info = new char[sizeof(CSectionsdClient::CurrentNextInfo)]; + memcpy(_info, &info, sizeof(CSectionsdClient::CurrentNextInfo)); neutrino_msg_t msg; if (info.flags & CSectionsdClient::epgflags::has_current) msg = NeutrinoMessages::EVT_CURRENTEPG; @@ -1290,8 +1290,8 @@ CSectionsdClient::CurrentNextInfo CInfoViewer::getEPG (const t_channel_id for_ch msg = NeutrinoMessages::EVT_NEXTEPG; g_RCInput->postMsg(msg, (unsigned) _info, false ); } else { - t_channel_id *p = new t_channel_id; - *p = for_channel_id; + char *p = new char[sizeof(t_channel_id)]; + memcpy(p, &for_channel_id, sizeof(t_channel_id)); g_RCInput->postMsg (NeutrinoMessages::EVT_NOEPG_YET, (const neutrino_msg_data_t) p, false); // data is pointer to allocated memory } oldinfo = info;