diff options
author | jacobkeeler <jacob.keeler@livioradio.com> | 2017-11-02 14:58:28 -0400 |
---|---|---|
committer | jacobkeeler <jacob.keeler@livioradio.com> | 2017-11-02 14:58:28 -0400 |
commit | c340d8c2905de81458756aa5fdb66307878cde75 (patch) | |
tree | 14585d662142dfc39f3bd786d07e32256dd7ba66 | |
parent | 5f9a93c34aac15c04181ecb28180dc6762f2daac (diff) | |
parent | 2b29c82396c6b24e15f8d54405821f39de379741 (diff) | |
download | sdl_core-c340d8c2905de81458756aa5fdb66307878cde75.tar.gz |
Merge remote-tracking branch 'dev-gh/fix/Memory_leaks' into develop
7 files changed, 43 insertions, 18 deletions
diff --git a/src/components/application_manager/include/application_manager/message.h b/src/components/application_manager/include/application_manager/message.h index 77ef5479ee..6eacf9fe3e 100644 --- a/src/components/application_manager/include/application_manager/message.h +++ b/src/components/application_manager/include/application_manager/message.h @@ -93,7 +93,9 @@ class Message { void set_correlation_id(int32_t id); void set_connection_key(int32_t key); void set_message_type(MessageType type); + // DEPRECATED void set_binary_data(BinaryData* data); + void set_binary_data(const BinaryData* data); void set_json_message(const std::string& json_message); void set_protocol_version(protocol_handler::MajorProtocolVersion version); void set_smart_object(const smart_objects::SmartObject& object); diff --git a/src/components/application_manager/src/commands/command_request_impl.cc b/src/components/application_manager/src/commands/command_request_impl.cc index efd8c8f042..f461db814d 100644 --- a/src/components/application_manager/src/commands/command_request_impl.cc +++ b/src/components/application_manager/src/commands/command_request_impl.cc @@ -33,6 +33,7 @@ #include <algorithm> #include <string> #include "utils/macro.h" +#include "utils/make_shared.h" #include "application_manager/commands/command_request_impl.h" #include "application_manager/application_manager.h" #include "application_manager/message_helper.h" @@ -228,11 +229,9 @@ void CommandRequestImpl::SendResponse( current_state_ = kCompleted; } - smart_objects::SmartObjectSPtr result = new smart_objects::SmartObject; - if (!result) { - LOG4CXX_ERROR(logger_, "Memory allocation failed."); - return; - } + smart_objects::SmartObjectSPtr result = + utils::MakeShared<smart_objects::SmartObject>(); + smart_objects::SmartObject& response = *result; response[strings::params][strings::message_type] = MessageType::kResponse; diff --git a/src/components/application_manager/src/message.cc b/src/components/application_manager/src/message.cc index b211b270b8..d67a235a76 100644 --- a/src/components/application_manager/src/message.cc +++ b/src/components/application_manager/src/message.cc @@ -194,6 +194,7 @@ void Message::set_message_type(MessageType type) { type_ = type; } +// DEPRECATED void Message::set_binary_data(BinaryData* data) { if (NULL == data) { NOTREACHED(); @@ -207,6 +208,19 @@ void Message::set_binary_data(BinaryData* data) { binary_data_ = new BinaryData(*data); } +void Message::set_binary_data(const BinaryData* data) { + if (NULL == data) { + NOTREACHED(); + return; + } + + if (binary_data_) { + delete binary_data_; + } + + binary_data_ = new BinaryData(*data); +} + void Message::set_json_message(const std::string& json_message) { json_message_ = json_message; } diff --git a/src/components/application_manager/src/mobile_message_handler.cc b/src/components/application_manager/src/mobile_message_handler.cc index a3b5aa7dbd..bc3aa32731 100644 --- a/src/components/application_manager/src/mobile_message_handler.cc +++ b/src/components/application_manager/src/mobile_message_handler.cc @@ -198,6 +198,7 @@ MobileMessageHandler::HandleIncomingMessageProtocolV2( if (!payload.data.empty()) { BinaryData binary_payload_data(payload.data); outgoing_message->set_binary_data(&binary_payload_data); + outgoing_message->set_binary_data(&payload.data); } return outgoing_message.release(); } diff --git a/src/components/telemetry_monitor/include/telemetry_monitor/telemetry_monitor.h b/src/components/telemetry_monitor/include/telemetry_monitor/telemetry_monitor.h index 80338804ee..ab33e50df3 100644 --- a/src/components/telemetry_monitor/include/telemetry_monitor/telemetry_monitor.h +++ b/src/components/telemetry_monitor/include/telemetry_monitor/telemetry_monitor.h @@ -35,7 +35,6 @@ #include <string> -#include "utils/shared_ptr.h" #include "utils/message_queue.h" #include "utils/threads/thread.h" #include "utils/threads/thread_delegate.h" @@ -47,6 +46,11 @@ #include "protocol_handler_observer.h" #include "protocol_handler/protocol_handler_impl.h" +namespace utils { +template <typename T> +class SharedPtr; +} + namespace telemetry_monitor { using ::utils::MessageQueue; @@ -88,7 +92,9 @@ class TelemetryMonitor { virtual void Stop(); virtual void Start(); virtual void SendMetric(utils::SharedPtr<MetricWrapper> metric); + // DEPRECATED void set_streamer(Streamer* streamer); + void set_streamer(utils::SharedPtr<Streamer> streamer); const std::string& ip() const; int16_t port() const; @@ -96,7 +102,7 @@ class TelemetryMonitor { std::string server_address_; int16_t port_; threads::Thread* thread_; - Streamer* streamer_; + utils::SharedPtr<Streamer> streamer_; ApplicationManagerObserver app_observer; TransportManagerObserver tm_observer; ProtocolHandlerObserver ph_observer; diff --git a/src/components/telemetry_monitor/src/telemetry_monitor.cc b/src/components/telemetry_monitor/src/telemetry_monitor.cc index 88c484ffd4..a7d9cc6fd3 100644 --- a/src/components/telemetry_monitor/src/telemetry_monitor.cc +++ b/src/components/telemetry_monitor/src/telemetry_monitor.cc @@ -42,6 +42,8 @@ #include "transport_manager/transport_manager_default.h" #include "utils/resource_usage.h" +#include "utils/make_shared.h" +#include "utils/shared_ptr.h" #include "telemetry_monitor/telemetry_observable.h" namespace telemetry_monitor { @@ -53,24 +55,23 @@ TelemetryMonitor::TelemetryMonitor(const std::string& server_address, : server_address_(server_address) , port_(port) , thread_(NULL) - , streamer_(NULL) , app_observer(this) , tm_observer(this) , ph_observer(this) {} void TelemetryMonitor::Start() { - streamer_ = streamer_ ? streamer_ : new Streamer(this); - thread_ = threads::CreateThread("TelemetryMonitor", streamer_); + streamer_ = streamer_ ? streamer_ : utils::MakeShared<Streamer>(this); + thread_ = threads::CreateThread("TelemetryMonitor", streamer_.get()); } -void TelemetryMonitor::set_streamer(Streamer* streamer) { +// DEPRECATED +void TelemetryMonitor::set_streamer(Streamer* streamer) {} + +void TelemetryMonitor::set_streamer(utils::SharedPtr<Streamer> streamer) { LOG4CXX_AUTO_TRACE(logger_); if (thread_ && !thread_->is_running()) { - thread_->set_delegate(streamer); - if (streamer_) { - delete streamer_; - } streamer_ = streamer; + thread_->set_delegate(streamer_.get()); } else { LOG4CXX_ERROR(logger_, "Unable to replace streamer if it is active"); } @@ -86,7 +87,6 @@ int16_t TelemetryMonitor::port() const { TelemetryMonitor::~TelemetryMonitor() { Stop(); - delete streamer_; } void TelemetryMonitor::Init( @@ -117,7 +117,7 @@ void TelemetryMonitor::Stop() { } void TelemetryMonitor::SendMetric(utils::SharedPtr<MetricWrapper> metric) { - if ((NULL != streamer_) && streamer_->is_client_connected_) { + if (streamer_ && streamer_->is_client_connected_) { streamer_->PushMessage(metric); } } diff --git a/src/components/telemetry_monitor/test/telemetry_monitor_test.cc b/src/components/telemetry_monitor/test/telemetry_monitor_test.cc index 090c7ab5b7..5235f0a469 100644 --- a/src/components/telemetry_monitor/test/telemetry_monitor_test.cc +++ b/src/components/telemetry_monitor/test/telemetry_monitor_test.cc @@ -40,6 +40,8 @@ #include "connection_handler/mock_connection_handler.h" #include "transport_manager/mock_transport_manager.h" #include "telemetry_monitor/mock_telemetry_observable.h" +#include "utils/shared_ptr.h" +#include "utils/make_shared.h" using testing::Return; using testing::_; @@ -90,7 +92,8 @@ TEST(TelemetryMonitorTest, MessageProcess) { EXPECT_CALL(am_observeble, SetTelemetryObserver(_)); EXPECT_CALL(transport_manager_mock, SetTelemetryObserver(_)); telemetry_monitor::TelemetryMonitor telemetry_monitor(server_address, port); - StreamerMock* streamer_mock = new StreamerMock(&telemetry_monitor); + utils::SharedPtr<StreamerMock> streamer_mock = + utils::MakeShared<StreamerMock>(&telemetry_monitor); // streamer_mock will be freed by telemetry_monitor on destruction telemetry_monitor.Start(); telemetry_monitor.set_streamer(streamer_mock); |