Skip to content

Commit

Permalink
Fix memory leak in exception catching.
Browse files Browse the repository at this point in the history
Reformat according to ament_uncrustify.

Fix memory leak in exception catching.

Finish fixing memory-leak
  • Loading branch information
yguel committed Jun 7, 2024
1 parent b850c4b commit 4bae5ec
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,24 @@ void GenericEcSlave::setup_syncs()
if (sm_configs_.size() == 0) {
syncs_.push_back({0, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE});
syncs_.push_back({1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE});
syncs_.push_back({2, EC_DIR_OUTPUT, (unsigned int)(rpdos_.size()), rpdos_.data(), EC_WD_ENABLE});
syncs_.push_back({3, EC_DIR_INPUT, (unsigned int)(tpdos_.size()), tpdos_.data(), EC_WD_DISABLE});
syncs_.push_back(
{2, EC_DIR_OUTPUT, (unsigned int)(rpdos_.size()), rpdos_.data(),
EC_WD_ENABLE});
syncs_.push_back(
{3, EC_DIR_INPUT, (unsigned int)(tpdos_.size()), tpdos_.data(),
EC_WD_DISABLE});
} else {
for (auto & sm : sm_configs_) {
if (sm.pdo_name == "null") {
syncs_.push_back({sm.index, sm.type, 0, NULL, sm.watchdog});
} else if (sm.pdo_name == "rpdo") {
syncs_.push_back({sm.index, sm.type, (unsigned int)(rpdos_.size()), rpdos_.data(), sm.watchdog});
syncs_.push_back(
{sm.index, sm.type, (unsigned int)(rpdos_.size()),
rpdos_.data(), sm.watchdog});
} else if (sm.pdo_name == "tpdo") {
syncs_.push_back({sm.index, sm.type, (unsigned int)(tpdos_.size()), tpdos_.data(), sm.watchdog});
syncs_.push_back(
{sm.index, sm.type, (unsigned int)(tpdos_.size()),
tpdos_.data(), sm.watchdog});
}
}
}
Expand Down
34 changes: 27 additions & 7 deletions ethercat_manager/src/ethercat_sdo_srv_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
#include "ethercat_manager/ec_master_async.hpp"
#include "ethercat_manager/data_convertion_tools.hpp"


namespace ethercat_manager
{
void upload(
Expand Down Expand Up @@ -60,6 +59,9 @@ void upload(
response->success = false;
RCLCPP_ERROR(rclcpp::get_logger("ethercat_manager"), return_stream.str().c_str());
response->sdo_return_message = return_stream.str();
if (nullptr != data.target) {
delete[] data.target;
}
return;
}

Expand All @@ -70,6 +72,9 @@ void upload(
response->success = false;
RCLCPP_ERROR(rclcpp::get_logger("ethercat_manager"), return_stream.str().c_str());
response->sdo_return_message = return_stream.str();
if (nullptr != data.target) {
delete[] data.target;
}
return;
}

Expand All @@ -78,11 +83,13 @@ void upload(
try {
buffer2data(data_stream, data_value, data_type, data.target, data.data_size);
} catch (SizeException & e) {
delete[] data.target;
return_stream << e.what();
response->success = false;
RCLCPP_ERROR(rclcpp::get_logger("ethercat_manager"), return_stream.str().c_str());
response->sdo_return_message = return_stream.str();
if (nullptr != data.target) {
delete[] data.target;
}
return;
}
return_stream << "SDO upload done successfully";
Expand All @@ -91,7 +98,9 @@ void upload(
response->sdo_return_value = data_value;
response->sdo_return_message = return_stream.str();

delete[] data.target;
if (nullptr != data.target) {
delete[] data.target;
}
RCLCPP_INFO(rclcpp::get_logger("ethercat_sdo_srv_server"), return_stream.str().c_str());
}

Expand Down Expand Up @@ -122,18 +131,22 @@ void download(
data.data_size = data2buffer(
data_type, request->sdo_value, data.data, data.data_size);
} catch (SizeException & e) {
delete[] data.data;
return_stream << e.what();
response->success = false;
response->sdo_return_message = return_stream.str();
RCLCPP_ERROR(rclcpp::get_logger("ethercat_manager"), return_stream.str().c_str());
if (nullptr != data.target) {
delete[] data.target;
}
return;
} catch (std::ios::failure & e) {
delete[] data.data;
return_stream << "Invalid value for type '" << data_type->name << "'!";
response->success = false;
response->sdo_return_message = return_stream.str();
RCLCPP_ERROR(rclcpp::get_logger("ethercat_manager"), return_stream.str().c_str());
if (nullptr != data.target) {
delete[] data.target;
}
return;
}

Expand All @@ -145,6 +158,9 @@ void download(
response->success = false;
RCLCPP_ERROR(rclcpp::get_logger("ethercat_manager"), return_stream.str().c_str());
response->sdo_return_message = return_stream.str();
if (nullptr != data.target) {
delete[] data.target;
}
return;
}

Expand All @@ -155,6 +171,9 @@ void download(
response->success = false;
RCLCPP_ERROR(rclcpp::get_logger("ethercat_manager"), return_stream.str().c_str());
response->sdo_return_message = return_stream.str();
if (nullptr != data.target) {
delete[] data.target;
}
return;
}

Expand All @@ -164,12 +183,13 @@ void download(
response->success = true;
response->sdo_return_message = return_stream.str();

delete[] data.data;
if (nullptr != data.target) {
delete[] data.target;
}
RCLCPP_INFO(rclcpp::get_logger("ethercat_sdo_srv_server"), return_stream.str().c_str());
}
} // namespace ethercat_manager


int main(int argc, char ** argv)
{
rclcpp::init(argc, argv);
Expand Down

0 comments on commit 4bae5ec

Please sign in to comment.