handler.patch 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. --- contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc (index)
  2. +++ contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc (working tree)
  3. @@ -468,6 +468,20 @@ void MallocExtension::EnableForkSupport() {
  4. #endif
  5. }
  6. +static std::atomic<MallocExtension::SoftMemoryLimitCallback*> SoftMemoryLimitHandler_;
  7. +
  8. +void MallocExtension::SetSoftMemoryLimitHandler(SoftMemoryLimitCallback* handler) {
  9. +#if ABSL_INTERNAL_HAVE_WEAK_MALLOCEXTENSION_STUBS
  10. + SoftMemoryLimitHandler_.store(handler);
  11. +#endif
  12. +}
  13. +
  14. +MallocExtension::SoftMemoryLimitCallback* MallocExtension::GetSoftMemoryLimitHandler() {
  15. +#if ABSL_INTERNAL_HAVE_WEAK_MALLOCEXTENSION_STUBS
  16. + return SoftMemoryLimitHandler_.load();
  17. +#endif
  18. +}
  19. +
  20. void MallocExtension::SetSampleUserDataCallbacks(
  21. CreateSampleUserDataCallback create,
  22. CopySampleUserDataCallback copy,
  23. --- contrib/libs/tcmalloc/tcmalloc/malloc_extension.h (index)
  24. +++ contrib/libs/tcmalloc/tcmalloc/malloc_extension.h (working tree)
  25. @@ -475,6 +475,10 @@ class MallocExtension final {
  26. // Allocator will continue to function correctly in the child, after calling fork().
  27. static void EnableForkSupport();
  28. + using SoftMemoryLimitCallback = void();
  29. + static void SetSoftMemoryLimitHandler(SoftMemoryLimitCallback* handler);
  30. + static SoftMemoryLimitCallback* GetSoftMemoryLimitHandler();
  31. +
  32. using CreateSampleUserDataCallback = void*();
  33. using CopySampleUserDataCallback = void*(void*);
  34. using DestroySampleUserDataCallback = void(void*);
  35. --- contrib/libs/tcmalloc/tcmalloc/page_allocator.cc (index)
  36. +++ contrib/libs/tcmalloc/tcmalloc/page_allocator.cc (working tree)
  37. @@ -151,6 +151,10 @@ void PageAllocator::ShrinkToUsageLimit() {
  38. warned = true;
  39. Log(kLogWithStack, __FILE__, __LINE__, "Couldn't respect usage limit of ",
  40. limit_, "and OOM is likely to follow.");
  41. +
  42. + if (auto* handler = MallocExtension::GetSoftMemoryLimitHandler()) {
  43. + (*handler)();
  44. + }
  45. }
  46. bool PageAllocator::ShrinkHardBy(Length pages) {