summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yql/essentials/minikql/mkql_alloc.cpp50
1 files changed, 34 insertions, 16 deletions
diff --git a/yql/essentials/minikql/mkql_alloc.cpp b/yql/essentials/minikql/mkql_alloc.cpp
index 8446522edac..299e691f168 100644
--- a/yql/essentials/minikql/mkql_alloc.cpp
+++ b/yql/essentials/minikql/mkql_alloc.cpp
@@ -298,9 +298,15 @@ void* MKQLArrowAllocateOnArena(ui64 size) {
}
void* MKQLArrowAllocate(ui64 size) {
- if (size <= ArrowSizeForArena) {
- return MKQLArrowAllocateOnArena(size);
+#if defined(ALLOW_DEFAULT_ALLOCATOR)
+ if (Y_LIKELY(!TAllocState::IsDefaultAllocatorUsed())) {
+#endif
+ if (size <= ArrowSizeForArena) {
+ return MKQLArrowAllocateOnArena(size);
+ }
+#if defined(ALLOW_DEFAULT_ALLOCATOR)
}
+#endif
TAllocState* state = TlsAllocState;
Y_ENSURE(state);
@@ -366,9 +372,15 @@ void MKQLArrowFreeOnArena(const void* ptr) {
}
void MKQLArrowFree(const void* mem, ui64 size) {
- if (size <= ArrowSizeForArena) {
- return MKQLArrowFreeOnArena(mem);
+#if defined(ALLOW_DEFAULT_ALLOCATOR)
+ if (Y_LIKELY(!TAllocState::IsDefaultAllocatorUsed())) {
+#endif
+ if (size <= ArrowSizeForArena) {
+ return MKQLArrowFreeOnArena(mem);
+ }
+#if defined(ALLOW_DEFAULT_ALLOCATOR)
}
+#endif
auto fullSize = size + sizeof(TMkqlArrowHeader);
auto header = ((TMkqlArrowHeader*)mem) - 1;
@@ -400,22 +412,28 @@ void MKQLArrowUntrack(const void* mem, ui64 size) {
return;
}
- if (size <= ArrowSizeForArena) {
- auto* page = (TMkqlArrowHeader*)TAllocState::GetPageStart(mem);
+#if defined(ALLOW_DEFAULT_ALLOCATOR)
+ if (Y_LIKELY(!TAllocState::IsDefaultAllocatorUsed())) {
+#endif
+ if (size <= ArrowSizeForArena) {
+ auto* page = (TMkqlArrowHeader*)TAllocState::GetPageStart(mem);
+
+ auto it = state->ArrowBuffers.find(page);
+ if (it == state->ArrowBuffers.end()) {
+ return;
+ }
- auto it = state->ArrowBuffers.find(page);
- if (it == state->ArrowBuffers.end()) {
- return;
- }
+ if (!page->Entry.IsUnlinked()) {
+ page->Entry.Unlink(); // unlink page immediately so we don't accidentally free untracked memory within `TAllocState`
+ state->ArrowBuffers.erase(it);
+ state->OffloadFree(page->Size);
+ }
- if (!page->Entry.IsUnlinked()) {
- page->Entry.Unlink(); // unlink page immediately so we don't accidentally free untracked memory within `TAllocState`
- state->ArrowBuffers.erase(it);
- state->OffloadFree(page->Size);
+ return;
}
-
- return;
+#if defined(ALLOW_DEFAULT_ALLOCATOR)
}
+#endif
auto it = state->ArrowBuffers.find(mem);
if (it == state->ArrowBuffers.end()) {