1*51c0b2f7Stbbdev /* 2*51c0b2f7Stbbdev Copyright (c) 2018-2020 Intel Corporation 3*51c0b2f7Stbbdev 4*51c0b2f7Stbbdev Licensed under the Apache License, Version 2.0 (the "License"); 5*51c0b2f7Stbbdev you may not use this file except in compliance with the License. 6*51c0b2f7Stbbdev You may obtain a copy of the License at 7*51c0b2f7Stbbdev 8*51c0b2f7Stbbdev http://www.apache.org/licenses/LICENSE-2.0 9*51c0b2f7Stbbdev 10*51c0b2f7Stbbdev Unless required by applicable law or agreed to in writing, software 11*51c0b2f7Stbbdev distributed under the License is distributed on an "AS IS" BASIS, 12*51c0b2f7Stbbdev WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*51c0b2f7Stbbdev See the License for the specific language governing permissions and 14*51c0b2f7Stbbdev limitations under the License. 15*51c0b2f7Stbbdev */ 16*51c0b2f7Stbbdev 17*51c0b2f7Stbbdev #define __TBB_NO_IMPLICIT_LINKAGE 1 18*51c0b2f7Stbbdev 19*51c0b2f7Stbbdev #include "common/test.h" 20*51c0b2f7Stbbdev 21*51c0b2f7Stbbdev #include "common/allocator_overload.h" 22*51c0b2f7Stbbdev #include "common/utils_report.h" 23*51c0b2f7Stbbdev #include "common/utils_env.h" 24*51c0b2f7Stbbdev 25*51c0b2f7Stbbdev // Disabling malloc proxy via env variable is available only on Windows for now 26*51c0b2f7Stbbdev #if MALLOC_WINDOWS_OVERLOAD_ENABLED 27*51c0b2f7Stbbdev 28*51c0b2f7Stbbdev #define TEST_SYSTEM_COMMAND "test_malloc_overload_disable.exe" 29*51c0b2f7Stbbdev 30*51c0b2f7Stbbdev #include "tbb/tbbmalloc_proxy.h" 31*51c0b2f7Stbbdev 32*51c0b2f7Stbbdev #include "../src/tbb/environment.h" 33*51c0b2f7Stbbdev 34*51c0b2f7Stbbdev const size_t SmallObjectSize = 16; 35*51c0b2f7Stbbdev const size_t LargeObjectSize = 2*8*1024; 36*51c0b2f7Stbbdev const size_t HugeObjectSize = 2*1024*1024; 37*51c0b2f7Stbbdev 38*51c0b2f7Stbbdev void CheckWindowsProxyDisablingViaMemSize( size_t ObjectSize ) { 39*51c0b2f7Stbbdev void* ptr = malloc(ObjectSize); 40*51c0b2f7Stbbdev /* 41*51c0b2f7Stbbdev * If msize returns 0 - tbbmalloc doesn't contain this object in it`s memory 42*51c0b2f7Stbbdev * Also msize check that proxy lib is linked 43*51c0b2f7Stbbdev */ 44*51c0b2f7Stbbdev REQUIRE_MESSAGE(!__TBB_malloc_safer_msize(ptr,NULL), "Malloc replacement is not deactivated"); 45*51c0b2f7Stbbdev free(ptr); 46*51c0b2f7Stbbdev } 47*51c0b2f7Stbbdev 48*51c0b2f7Stbbdev TEST_CASE("Disabling malloc overload") { 49*51c0b2f7Stbbdev if (!tbb::detail::r1::GetBoolEnvironmentVariable("TBB_MALLOC_DISABLE_REPLACEMENT")) 50*51c0b2f7Stbbdev { 51*51c0b2f7Stbbdev utils::SetEnv("TBB_MALLOC_DISABLE_REPLACEMENT","1"); 52*51c0b2f7Stbbdev if ((system(TEST_SYSTEM_COMMAND)) != 0) { 53*51c0b2f7Stbbdev REPORT("Test error: unable to run the command: %s", TEST_SYSTEM_COMMAND); 54*51c0b2f7Stbbdev exit(-1); 55*51c0b2f7Stbbdev } 56*51c0b2f7Stbbdev // We must execute exit(0) to avoid duplicate "Done" printing. 57*51c0b2f7Stbbdev exit(0); 58*51c0b2f7Stbbdev } 59*51c0b2f7Stbbdev else 60*51c0b2f7Stbbdev { 61*51c0b2f7Stbbdev // Check SMALL objects replacement disable 62*51c0b2f7Stbbdev CheckWindowsProxyDisablingViaMemSize(SmallObjectSize); 63*51c0b2f7Stbbdev // Check LARGE objects replacement disable 64*51c0b2f7Stbbdev CheckWindowsProxyDisablingViaMemSize(LargeObjectSize); 65*51c0b2f7Stbbdev // Check HUGE objects replacement disable 66*51c0b2f7Stbbdev CheckWindowsProxyDisablingViaMemSize(HugeObjectSize); 67*51c0b2f7Stbbdev } 68*51c0b2f7Stbbdev } 69*51c0b2f7Stbbdev #endif // MALLOC_WINDOWS_OVERLOAD_ENABLED 70