This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new b152abc292a [fix](faststring) fix memtracking in faststring free
(#27731)
b152abc292a is described below
commit b152abc292a4b025c2a274ed9496b8c0e1c48e15
Author: Kaijie Chen <[email protected]>
AuthorDate: Wed Nov 29 17:05:14 2023 +0800
[fix](faststring) fix memtracking in faststring free (#27731)
---
be/src/util/faststring.cc | 9 +++++----
be/src/util/faststring.h | 2 +-
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/be/src/util/faststring.cc b/be/src/util/faststring.cc
index cf373efec4b..046e08c29d8 100644
--- a/be/src/util/faststring.cc
+++ b/be/src/util/faststring.cc
@@ -41,14 +41,15 @@ void faststring::GrowArray(size_t newcapacity) {
if (len_ > 0) {
memcpy(&newdata[0], &data_[0], len_);
}
- capacity_ = newcapacity;
+
if (data_ != initial_data_) {
- Allocator::free(data_);
+ Allocator::free(data_, capacity_);
} else {
ASAN_POISON_MEMORY_REGION(initial_data_, arraysize(initial_data_));
}
data_ = newdata.release();
+ capacity_ = newcapacity;
ASAN_POISON_MEMORY_REGION(data_ + len_, capacity_ - len_);
}
@@ -57,13 +58,13 @@ void faststring::ShrinkToFitInternal() {
if (len_ <= kInitialCapacity) {
ASAN_UNPOISON_MEMORY_REGION(initial_data_, len_);
memcpy(initial_data_, &data_[0], len_);
- Allocator::free(data_);
+ Allocator::free(data_, capacity_);
data_ = initial_data_;
capacity_ = kInitialCapacity;
} else {
std::unique_ptr<uint8_t[]>
newdata(reinterpret_cast<uint8_t*>(Allocator::alloc(len_)));
memcpy(&newdata[0], &data_[0], len_);
- Allocator::free(data_);
+ Allocator::free(data_, capacity_);
data_ = newdata.release();
capacity_ = len_;
}
diff --git a/be/src/util/faststring.h b/be/src/util/faststring.h
index 72a362156df..bd7c07e2d5b 100644
--- a/be/src/util/faststring.h
+++ b/be/src/util/faststring.h
@@ -54,7 +54,7 @@ public:
~faststring() {
ASAN_UNPOISON_MEMORY_REGION(initial_data_, arraysize(initial_data_));
if (data_ != initial_data_) {
- Allocator::free(data_);
+ Allocator::free(data_, capacity_);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]