aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authoraleexfi <aleexfi@yandex-team.com>2022-10-04 13:53:13 +0300
committeraleexfi <aleexfi@yandex-team.com>2022-10-04 13:53:13 +0300
commit4cf93820c1ced899f7d1be40a63e60451003fb8a (patch)
treed00ccd2660e302ebdb391b315df275021e0a81e0 /library/cpp
parent11734939277c0f1cca0aa21c2e5d28dd7a4077c6 (diff)
downloadydb-4cf93820c1ced899f7d1be40a63e60451003fb8a.tar.gz
Fix of aligned_free on windows
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/yt/memory/new-inl.h28
-rw-r--r--library/cpp/yt/memory/ref_counted.h4
-rw-r--r--library/cpp/yt/misc/cast-inl.h4
-rw-r--r--library/cpp/yt/string/enum-inl.h4
4 files changed, 26 insertions, 14 deletions
diff --git a/library/cpp/yt/memory/new-inl.h b/library/cpp/yt/memory/new-inl.h
index 5d5fcc45c4..40bf49d3e4 100644
--- a/library/cpp/yt/memory/new-inl.h
+++ b/library/cpp/yt/memory/new-inl.h
@@ -188,11 +188,15 @@ Y_FORCE_INLINE TIntrusivePtr<T> SafeConstruct(void* ptr, As&&... args)
template <size_t Size, size_t Alignment>
void* AllocateConstSizeAligned()
{
+#ifdef _win_
+ return AllignedMalloc(Size, Alignment);
+#else
if (Alignment <= 16) {
return NYTAlloc::AllocateConstSize<Size>();
} else {
return AllignedMalloc(Size, Alignment);
}
+#endif
}
} // namespace NDetail
@@ -203,11 +207,11 @@ template <class T, class... As, class>
Y_FORCE_INLINE TIntrusivePtr<T> New(
As&&... args)
{
- void* ptr = NDetail::AllocateConstSizeAligned<
- NDetail::TConstructHelper<T>::Size,
- NDetail::TConstructHelper<T>::Alignment>();
+ void* ptr = NYT::NDetail::AllocateConstSizeAligned<
+ NYT::NDetail::TConstructHelper<T>::Size,
+ NYT::NDetail::TConstructHelper<T>::Alignment>();
- return NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...);
+ return NYT::NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...);
}
template <class T, class... As, class>
@@ -215,11 +219,11 @@ Y_FORCE_INLINE TIntrusivePtr<T> New(
typename T::TAllocator* allocator,
As&&... args)
{
- auto* ptr = allocator->Allocate(NDetail::TConstructHelper<T>::Size);
+ auto* ptr = allocator->Allocate(NYT::NDetail::TConstructHelper<T>::Size);
if (!ptr) {
return nullptr;
}
- return NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...);
+ return NYT::NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...);
}
////////////////////////////////////////////////////////////////////////////////
@@ -232,11 +236,15 @@ Y_FORCE_INLINE TIntrusivePtr<T> NewWithExtraSpace(
auto totalSize = NYT::NDetail::TConstructHelper<T>::Size + extraSpaceSize;
void* ptr = nullptr;
+#ifdef _win_
+ ptr = NYT::NDetail::AllignedMalloc(totalSize, NYT::NDetail::TConstructHelper<T>::Alignment);
+#else
if (NYT::NDetail::TConstructHelper<T>::Alignment <= 16) {
ptr = NYTAlloc::Allocate(totalSize);
} else {
ptr = NYT::NDetail::AllignedMalloc(totalSize, NYT::NDetail::TConstructHelper<T>::Alignment);
}
+#endif
return NYT::NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...);
}
@@ -262,9 +270,9 @@ template <class T, class TDeleter, class... As>
Y_FORCE_INLINE TIntrusivePtr<T> NewWithDelete(const TDeleter& deleter, As&&... args)
{
using TWrapper = TRefCountedWrapperWithDeleter<T, TDeleter>;
- void* ptr = NDetail::AllocateConstSizeAligned<sizeof(TWrapper), alignof(TWrapper)>();
+ void* ptr = NYT::NDetail::AllocateConstSizeAligned<sizeof(TWrapper), alignof(TWrapper)>();
- auto* instance = NDetail::NewEpilogue<TWrapper>(
+ auto* instance = NYT::NDetail::NewEpilogue<TWrapper>(
ptr,
deleter,
std::forward<As>(args)...);
@@ -280,9 +288,9 @@ Y_FORCE_INLINE TIntrusivePtr<T> NewWithLocation(
As&&... args)
{
using TWrapper = TRefCountedWrapperWithCookie<T>;
- void* ptr = NDetail::AllocateConstSizeAligned<sizeof(TWrapper), alignof(TWrapper)>();
+ void* ptr = NYT::NDetail::AllocateConstSizeAligned<sizeof(TWrapper), alignof(TWrapper)>();
- auto* instance = NDetail::NewEpilogue<TWrapper>(ptr, std::forward<As>(args)...);
+ auto* instance = NYT::NDetail::NewEpilogue<TWrapper>(ptr, std::forward<As>(args)...);
#ifdef YT_ENABLE_REF_COUNTED_TRACKING
instance->InitializeTracking(GetRefCountedTypeCookieWithLocation<T, TTag, Counter>(location));
diff --git a/library/cpp/yt/memory/ref_counted.h b/library/cpp/yt/memory/ref_counted.h
index 9c049c0998..e48d601c84 100644
--- a/library/cpp/yt/memory/ref_counted.h
+++ b/library/cpp/yt/memory/ref_counted.h
@@ -38,7 +38,11 @@ struct TFreeMemory
{
static void Do(void* ptr)
{
+#ifdef _win_
+ ::_aligned_free(ptr);
+#else
::free(ptr);
+#endif
}
};
diff --git a/library/cpp/yt/misc/cast-inl.h b/library/cpp/yt/misc/cast-inl.h
index 1920b7c0b7..a8b34c8af3 100644
--- a/library/cpp/yt/misc/cast-inl.h
+++ b/library/cpp/yt/misc/cast-inl.h
@@ -67,7 +67,7 @@ inline TString FormatInvalidCastValue(char8_t value)
template <class T, class S>
bool TryIntegralCast(S value, T* result)
{
- if (!NDetail::IsInIntegralRange<T>(value)) {
+ if (!NYT::NDetail::IsInIntegralRange<T>(value)) {
return false;
}
*result = static_cast<T>(value);
@@ -80,7 +80,7 @@ T CheckedIntegralCast(S value)
T result;
if (!TryIntegralCast<T>(value, &result)) {
throw TSimpleException(Sprintf("Argument value %s is out of expected range",
- NDetail::FormatInvalidCastValue(value).c_str()));
+ NYT::NDetail::FormatInvalidCastValue(value).c_str()));
}
return result;
}
diff --git a/library/cpp/yt/string/enum-inl.h b/library/cpp/yt/string/enum-inl.h
index ab8acff71b..7ce7d2a350 100644
--- a/library/cpp/yt/string/enum-inl.h
+++ b/library/cpp/yt/string/enum-inl.h
@@ -59,7 +59,7 @@ T ParseEnum(TStringBuf value)
if (auto optionalResult = TryParseEnum<T>(value)) {
return *optionalResult;
}
- NDetail::ThrowMalformedEnumValueException(TEnumTraits<T>::GetTypeName(), value);
+ NYT::NDetail::ThrowMalformedEnumValueException(TEnumTraits<T>::GetTypeName(), value);
}
template <class T>
@@ -71,7 +71,7 @@ void FormatEnum(TStringBuilderBase* builder, T value, bool lowerCase)
auto* literal = TEnumTraits<T>::FindLiteralByValue(value);
if (!literal) {
YT_VERIFY(!TEnumTraits<T>::IsBitEnum);
- NDetail::FormatUnknownEnumValue(
+ NYT::NDetail::FormatUnknownEnumValue(
builder,
TEnumTraits<T>::GetTypeName(),
static_cast<typename TEnumTraits<T>::TUnderlying>(value));