From 951d3a96a3e138544bf15f1552dcecd88d20accd Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Wed, 23 Jun 2021 13:44:02 +0200 Subject: [PATCH] fix memleak --- consumer/api/cpp/src/consumer_c_glue.cpp | 11 ++++++----- tests/automatic/consumer/consumer_api/consumer_api.c | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/consumer/api/cpp/src/consumer_c_glue.cpp b/consumer/api/cpp/src/consumer_c_glue.cpp index 9aede5da0..25278ff0b 100644 --- a/consumer/api/cpp/src/consumer_c_glue.cpp +++ b/consumer/api/cpp/src/consumer_c_glue.cpp @@ -107,8 +107,9 @@ constexpr bool operator==(unsigned lhs, t rhs) { return lhs == static_cast<typename std::underlying_type<t>::type>(rhs); } -int process_error(AsapoErrorHandle* error, asapo::Error err) { - int retval = (err == nullptr) ? 0 : 1; +int process_error(AsapoErrorHandle* error, asapo::Error err, + const asapo::ErrorTemplateInterface* p_exclude_err_template = nullptr) { + int retval = (err == nullptr || (p_exclude_err_template != nullptr && err == *p_exclude_err_template)) ? 0 : -1; if (error == nullptr) { return retval; } @@ -479,7 +480,7 @@ extern "C" { AsapoErrorHandle* error) { asapo::Error err; auto retval = new asapo::DataSet(consumer->handle->GetNextDataset(*group_id->handle, min_size, stream, &err)); - if (process_error(error, std::move(err)) < 0 && err != asapo::ConsumerErrorTemplates::kPartialData) { + if (process_error(error, std::move(err), &asapo::ConsumerErrorTemplates::kPartialData) < 0) { return nullptr; } return new AsapoHandlerHolder<asapo::DataSet> {retval}; @@ -495,7 +496,7 @@ extern "C" { AsapoErrorHandle* error) { asapo::Error err; auto retval = new asapo::DataSet(consumer->handle->GetLastDataset(min_size, stream, &err)); - if (process_error(error, std::move(err)) < 0 && err != asapo::ConsumerErrorTemplates::kPartialData) { + if (process_error(error, std::move(err), &asapo::ConsumerErrorTemplates::kPartialData) < 0) { return nullptr; } return new AsapoHandlerHolder<asapo::DataSet> {retval}; @@ -528,7 +529,7 @@ extern "C" { AsapoErrorHandle* error) { asapo::Error err; auto retval = new asapo::DataSet(consumer->handle->GetDatasetById(id, min_size, stream, &err)); - if (process_error(error, std::move(err)) < 0 && err != asapo::ConsumerErrorTemplates::kPartialData) { + if (process_error(error, std::move(err), &asapo::ConsumerErrorTemplates::kPartialData) < 0) { return nullptr; } return new AsapoHandlerHolder<asapo::DataSet> {retval}; diff --git a/tests/automatic/consumer/consumer_api/consumer_api.c b/tests/automatic/consumer/consumer_api/consumer_api.c index 381121b42..8bac3bdda 100644 --- a/tests/automatic/consumer/consumer_api/consumer_api.c +++ b/tests/automatic/consumer/consumer_api/consumer_api.c @@ -170,7 +170,7 @@ void test_single(AsapoConsumerHandle consumer, AsapoStringHandle group_id) { ASSERT_TRUE(!strcmp(asapo_message_meta_get_name(md),"1"), "get next asapo_consumer_reset_last_read_marker "); // stream size - uint64_t size = asapo_consumer_get_current_size(consumer,"default", &err); + int64_t size = asapo_consumer_get_current_size(consumer,"default", &err); EXIT_IF_ERROR("asapo_consumer_get_current_size", err); ASSERT_EQ_INT(10,size,"asapo_consumer_get_current_size"); @@ -211,9 +211,9 @@ void test_single(AsapoConsumerHandle consumer, AsapoStringHandle group_id) { asapo_free_handle(&s2); // acknowledges - uint64_t id = asapo_consumer_get_last_acknowledged_message(consumer,group_id, "default", &err); + int64_t id = asapo_consumer_get_last_acknowledged_message(consumer,group_id, "default", &err); ASSERT_TRUE(asapo_error_get_type(err) == kNoData,"last ack default stream no data"); - ASSERT_EQ_INT(0,id,"last ack default stream no data id = 0"); + ASSERT_EQ_INT(-1,id,"last ack default stream no data id = -1"); AsapoIdListHandle nacks = asapo_consumer_get_unacknowledged_messages(consumer, group_id, 0, 0, "default", &err); EXIT_IF_ERROR("asapo_consumer_get_unacknowledged_messages", err); -- GitLab