This is an automated email from the ASF dual-hosted git repository.
xuyang pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
new c7b26ba1a01 [branch-1.2](bug) Fix coredump in aggregation node's
destruction (#28852)
c7b26ba1a01 is described below
commit c7b26ba1a01c906c552ff92e237a337440ddd622
Author: xy720 <[email protected]>
AuthorDate: Mon Dec 25 13:31:58 2023 +0800
[branch-1.2](bug) Fix coredump in aggregation node's destruction (#28852)
Fix coredump in aggregation node's destruction
---
be/src/vec/exec/vaggregation_node.cpp | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/be/src/vec/exec/vaggregation_node.cpp
b/be/src/vec/exec/vaggregation_node.cpp
index 67924a61b63..eff5db74832 100644
--- a/be/src/vec/exec/vaggregation_node.cpp
+++ b/be/src/vec/exec/vaggregation_node.cpp
@@ -822,18 +822,25 @@ void
AggregationNode::_emplace_into_hash_table(AggregateDataPtr* places, ColumnR
auto creator = [this](const auto& ctor, const auto& key) {
using KeyType = std::decay_t<decltype(key)>;
- if constexpr
(HashTableTraits<HashTableType>::is_string_hash_table &&
- !std::is_same_v<StringRef, KeyType>) {
- StringRef string_ref = to_string_ref(key);
- ArenaKeyHolder key_holder {string_ref,
*_agg_arena_pool};
- key_holder_persist_key(key_holder);
- auto mapped =
_aggregate_data_container->append_data(key_holder.key);
- _create_agg_status(mapped);
- ctor(key, mapped);
- } else {
- auto mapped =
_aggregate_data_container->append_data(key);
- _create_agg_status(mapped);
- ctor(key, mapped);
+ try {
+ if constexpr
(HashTableTraits<HashTableType>::is_string_hash_table &&
+ !std::is_same_v<StringRef, KeyType>) {
+ StringRef string_ref = to_string_ref(key);
+ ArenaKeyHolder key_holder {string_ref,
*_agg_arena_pool};
+ key_holder_persist_key(key_holder);
+ auto mapped =
_aggregate_data_container->append_data(key_holder.key);
+ _create_agg_status(mapped);
+ ctor(key, mapped);
+ } else {
+ auto mapped =
_aggregate_data_container->append_data(key);
+ _create_agg_status(mapped);
+ ctor(key, mapped);
+ }
+ } catch (...) {
+ // Exception-safety - if it can not allocate memory or
create status,
+ // the destructors will not be called.
+ ctor(key, nullptr);
+ throw;
}
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]