diff options
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/proton.cpp | 8 | ||||
-rw-r--r-- | vespamalloc/src/tests/stacktrace/stacktrace.cpp | 21 | ||||
-rw-r--r-- | vespamalloc/src/tests/test1/new_test.cpp | 22 | ||||
-rw-r--r-- | vespamalloc/src/vespamalloc/malloc/overload.h | 42 |
4 files changed, 23 insertions, 70 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/proton.cpp b/searchcore/src/vespa/searchcore/proton/server/proton.cpp index adae323c1d9..9c5438825b2 100644 --- a/searchcore/src/vespa/searchcore/proton/server/proton.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/proton.cpp @@ -767,15 +767,15 @@ Proton::updateMetrics(const metrics::MetricLockGuard &) metrics.resourceUsage.openFileDescriptors.set(FastOS_File::count_open_files()); metrics.resourceUsage.feedingBlocked.set((usageFilter.acceptWriteOperation() ? 0.0 : 1.0)); #ifdef __linux__ +#pragma GCC diagnostic push #if __GLIBC_PREREQ(2, 33) - struct mallinfo2 mallocInfo = mallinfo2(); - metrics.resourceUsage.mallocArena.set(mallocInfo.arena); -#else +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif struct mallinfo mallocInfo = mallinfo(); +#pragma GCC diagnostic pop // Vespamalloc reports arena in 1M blocks as an 'int' is too small. // If we use something else than vespamalloc this must be changed. metrics.resourceUsage.mallocArena.set(uint64_t(mallocInfo.arena) * 1_Mi); -#endif #else metrics.resourceUsage.mallocArena.set(UINT64_C(0)); #endif diff --git a/vespamalloc/src/tests/stacktrace/stacktrace.cpp b/vespamalloc/src/tests/stacktrace/stacktrace.cpp index 37322994586..f30e3c20f55 100644 --- a/vespamalloc/src/tests/stacktrace/stacktrace.cpp +++ b/vespamalloc/src/tests/stacktrace/stacktrace.cpp @@ -17,22 +17,12 @@ void * run(void * arg) } void verify_that_vespamalloc_datasegment_size_exists() { -#if __GLIBC_PREREQ(2, 33) - struct mallinfo2 info = mallinfo2(); - printf("Malloc used %zdm of memory\n", info.arena); - assert(info.arena >= 10 * 0x100000ul); - assert(info.arena < 10000 * 0x100000ul); - assert(info.fordblks == 0); - assert(info.fsmblks == 0); - assert(info.hblkhd == 0); - assert(info.hblks == 0); - assert(info.keepcost == 0); - assert(info.ordblks == 0); - assert(info.smblks == 0); - assert(info.uordblks == 0); - assert(info.usmblks == 0); -#else +#pragma GCC diagnostic push +#if __GNUC_PREREQ(2, 33) +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif struct mallinfo info = mallinfo(); +#pragma GCC diagnostic push printf("Malloc used %dm of memory\n",info.arena); assert(info.arena >= 10); assert(info.arena < 10000); @@ -45,7 +35,6 @@ void verify_that_vespamalloc_datasegment_size_exists() { assert(info.smblks == 0); assert(info.uordblks == 0); assert(info.usmblks == 0); -#endif } int main(int argc, char *argv[]) diff --git a/vespamalloc/src/tests/test1/new_test.cpp b/vespamalloc/src/tests/test1/new_test.cpp index ac053323255..9c291b3842e 100644 --- a/vespamalloc/src/tests/test1/new_test.cpp +++ b/vespamalloc/src/tests/test1/new_test.cpp @@ -95,19 +95,17 @@ TEST("verify new with alignment = 64 with single element") { LOG(info, "&s=%p", s.get()); } -#if __GLIBC_PREREQ(2, 26) -TEST("verify realloarray") { - void *arr = calloc(5,5); - void *arr2 = reallocarray(arr, 800, 5); - EXPECT_NOT_EQUAL(arr, arr2); - EXPECT_NOT_EQUAL(nullptr, arr2); - EXPECT_NOT_EQUAL(ENOMEM, errno); - - void *arr3 = reallocarray(arr2, 1u << 33, 1u << 33); - EXPECT_EQUAL(nullptr, arr3); - EXPECT_EQUAL(ENOMEM, errno); +TEST("verify new with alignment = 64 with single element") { + struct alignas(64) S { + long a; + }; + static_assert(sizeof(S) == 64); + static_assert(alignof(S) == 64); + auto s = std::make_unique<S>(); + verify_aligned(s.get()); + cmp(s.get(), &s->a); + LOG(info, "&s=%p", s.get()); } -#endif void verify_vespamalloc_usable_size() { struct AllocInfo { size_t requested; size_t usable;}; diff --git a/vespamalloc/src/vespamalloc/malloc/overload.h b/vespamalloc/src/vespamalloc/malloc/overload.h index 8815a11a84f..1ec37c37aa1 100644 --- a/vespamalloc/src/vespamalloc/malloc/overload.h +++ b/vespamalloc/src/vespamalloc/malloc/overload.h @@ -106,23 +106,6 @@ void operator delete[](void* ptr, std::size_t sz, std::align_val_t alignment) no extern "C" { -#if __GLIBC_PREREQ(2, 33) -struct mallinfo2 mallinfo2() __THROW __attribute__((visibility ("default"))); -struct mallinfo2 mallinfo2() __THROW { - struct mallinfo2 info; - info.arena = vespamalloc::_GmemP->dataSegment().dataSize(); - info.ordblks = 0; - info.smblks = 0; - info.hblks = 0; - info.hblkhd = 0; - info.usmblks = 0; - info.fsmblks = 0; - info.uordblks = 0; - info.fordblks = 0; - info.keepcost = 0; - return info; -} -#else struct mallinfo mallinfo() __THROW __attribute__((visibility ("default"))); struct mallinfo mallinfo() __THROW { struct mallinfo info; @@ -138,7 +121,6 @@ struct mallinfo mallinfo() __THROW { info.keepcost = 0; return info; } -#endif void * malloc(size_t sz) { return vespamalloc::createAllocator()->malloc(sz); @@ -154,17 +136,6 @@ void * realloc(void * ptr, size_t sz) return vespamalloc::createAllocator()->realloc(ptr, sz); } -void * reallocarray(void * ptr, size_t nemb, size_t elemSize) __THROW __attribute__((visibility ("default"))); -void * reallocarray(void * ptr, size_t nemb, size_t elemSize) __THROW -{ - size_t sz = nemb * elemSize; - if (nemb != 0 && (sz/nemb != elemSize)) { - errno = ENOMEM; - return nullptr; - } - return vespamalloc::createAllocator()->realloc(ptr, sz); -} - void* memalign(size_t align, size_t sz) __THROW __attribute__((visibility ("default"))); void* memalign(size_t align, size_t sz) __THROW { @@ -202,6 +173,7 @@ void *valloc(size_t size) __THROW return memalign(sysconf(_SC_PAGESIZE),size); } + void free(void * ptr) { if (ptr) { vespamalloc::_GmemP->free(ptr); } } @@ -215,8 +187,7 @@ size_t malloc_usable_size (void * ptr) __THROW { #ifdef __clang__ void* __libc_malloc(size_t sz) __THROW __attribute__((malloc, alloc_size(1))) ALIAS("malloc"); void* __libc_realloc(void* ptr, size_t sz) __THROW __attribute__((malloc, alloc_size(2))) ALIAS("realloc"); -void* __libc_reallocarray(void* ptr, size_t nemb, size_t sz) __THROW __attribute__((malloc, alloc_size(2,3))) ALIAS("reallocarray"); -void* __libc_calloc(size_t n, size_t sz) __THROW __attribute__((malloc, alloc_size(1,2))) ALIAS("calloc"); +void* __libc_calloc(size_t n, size_t sz) __THROW __attribute__((malloc, alloc_size(2))) ALIAS("calloc"); void cfree(void *) __THROW ALIAS("free"); void __libc_free(void* ptr) __THROW ALIAS("free"); #pragma clang diagnostic push @@ -226,20 +197,15 @@ void __libc_cfree(void* ptr) __THROW ALIAS("cfree"); #else void* __libc_malloc(size_t sz) __THROW __attribute__((leaf, malloc, alloc_size(1))) ALIAS("malloc"); void* __libc_realloc(void* ptr, size_t sz) __THROW __attribute__((leaf, malloc, alloc_size(2))) ALIAS("realloc"); -void* __libc_reallocarray(void* ptr, size_t nemb, size_t sz) __THROW __attribute__((leaf, malloc, alloc_size(2,3))) ALIAS("reallocarray"); -void* __libc_calloc(size_t n, size_t sz) __THROW __attribute__((leaf, malloc, alloc_size(1,2))) ALIAS("calloc"); +void* __libc_calloc(size_t n, size_t sz) __THROW __attribute__((leaf, malloc, alloc_size(2))) ALIAS("calloc"); void cfree(void *) __THROW __attribute__((leaf)) ALIAS("free"); void __libc_free(void* ptr) __THROW __attribute__((leaf)) ALIAS("free"); void __libc_cfree(void* ptr) __THROW __attribute__((leaf)) ALIAS("cfree"); #endif +struct mallinfo __libc_mallinfo() __THROW ALIAS("mallinfo"); size_t __libc_malloc_usable_size(void *ptr) __THROW ALIAS("malloc_usable_size"); void* __libc_memalign(size_t align, size_t s) __THROW __attribute__((leaf, malloc, alloc_size(2))) ALIAS("memalign"); int __posix_memalign(void** r, size_t a, size_t s) __THROW __nonnull((1)) ALIAS("posix_memalign"); -#if __GLIBC_PREREQ(2, 33) -struct mallinfo2 __libc_mallinfo2() __THROW ALIAS("mallinfo2"); -#else -struct mallinfo __libc_mallinfo() __THROW ALIAS("mallinfo"); -#endif #undef ALIAS } |