diff options
author | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
---|---|---|
committer | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
commit | 1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch) | |
tree | ab243607f74f78200787bba5b9b88f07ef1b966f /indra/llcorehttp/tests/test_allocator.cpp | |
parent | 6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff) | |
parent | e1623bb276f83a43ce7a197e388720c05bdefe61 (diff) |
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts:
# autobuild.xml
# indra/cmake/CMakeLists.txt
# indra/cmake/GoogleMock.cmake
# indra/llaudio/llaudioengine_fmodstudio.cpp
# indra/llaudio/llaudioengine_fmodstudio.h
# indra/llaudio/lllistener_fmodstudio.cpp
# indra/llaudio/lllistener_fmodstudio.h
# indra/llaudio/llstreamingaudio_fmodstudio.cpp
# indra/llaudio/llstreamingaudio_fmodstudio.h
# indra/llcharacter/llmultigesture.cpp
# indra/llcharacter/llmultigesture.h
# indra/llimage/llimage.cpp
# indra/llimage/llimagepng.cpp
# indra/llimage/llimageworker.cpp
# indra/llimage/tests/llimageworker_test.cpp
# indra/llmessage/tests/llmockhttpclient.h
# indra/llprimitive/llgltfmaterial.h
# indra/llrender/llfontfreetype.cpp
# indra/llui/llcombobox.cpp
# indra/llui/llfolderview.cpp
# indra/llui/llfolderviewmodel.h
# indra/llui/lllineeditor.cpp
# indra/llui/lllineeditor.h
# indra/llui/lltextbase.cpp
# indra/llui/lltextbase.h
# indra/llui/lltexteditor.cpp
# indra/llui/lltextvalidate.cpp
# indra/llui/lltextvalidate.h
# indra/llui/lluictrl.h
# indra/llui/llview.cpp
# indra/llwindow/llwindowmacosx.cpp
# indra/newview/app_settings/settings.xml
# indra/newview/llappearancemgr.cpp
# indra/newview/llappearancemgr.h
# indra/newview/llavatarpropertiesprocessor.cpp
# indra/newview/llavatarpropertiesprocessor.h
# indra/newview/llbreadcrumbview.cpp
# indra/newview/llbreadcrumbview.h
# indra/newview/llbreastmotion.cpp
# indra/newview/llbreastmotion.h
# indra/newview/llconversationmodel.h
# indra/newview/lldensityctrl.cpp
# indra/newview/lldensityctrl.h
# indra/newview/llface.inl
# indra/newview/llfloatereditsky.cpp
# indra/newview/llfloatereditwater.cpp
# indra/newview/llfloateremojipicker.h
# indra/newview/llfloaterimsessiontab.cpp
# indra/newview/llfloaterprofiletexture.cpp
# indra/newview/llfloaterprofiletexture.h
# indra/newview/llgesturemgr.cpp
# indra/newview/llgesturemgr.h
# indra/newview/llimpanel.cpp
# indra/newview/llimpanel.h
# indra/newview/llinventorybridge.cpp
# indra/newview/llinventorybridge.h
# indra/newview/llinventoryclipboard.cpp
# indra/newview/llinventoryclipboard.h
# indra/newview/llinventoryfunctions.cpp
# indra/newview/llinventoryfunctions.h
# indra/newview/llinventorygallery.cpp
# indra/newview/lllistbrowser.cpp
# indra/newview/lllistbrowser.h
# indra/newview/llpanelobjectinventory.cpp
# indra/newview/llpanelprofile.cpp
# indra/newview/llpanelprofile.h
# indra/newview/llpreviewgesture.cpp
# indra/newview/llsavedsettingsglue.cpp
# indra/newview/llsavedsettingsglue.h
# indra/newview/lltooldraganddrop.cpp
# indra/newview/llurllineeditorctrl.cpp
# indra/newview/llvectorperfoptions.cpp
# indra/newview/llvectorperfoptions.h
# indra/newview/llviewerparceloverlay.cpp
# indra/newview/llviewertexlayer.cpp
# indra/newview/llviewertexturelist.cpp
# indra/newview/macmain.h
# indra/test/test.cpp
Diffstat (limited to 'indra/llcorehttp/tests/test_allocator.cpp')
-rw-r--r-- | indra/llcorehttp/tests/test_allocator.cpp | 144 |
1 files changed, 72 insertions, 72 deletions
diff --git a/indra/llcorehttp/tests/test_allocator.cpp b/indra/llcorehttp/tests/test_allocator.cpp index 597e0d2fc9..757736acbb 100644 --- a/indra/llcorehttp/tests/test_allocator.cpp +++ b/indra/llcorehttp/tests/test_allocator.cpp @@ -1,4 +1,4 @@ -/** +/** * @file test_allocator.cpp * @brief quick and dirty allocator for tracking memory allocations * @@ -45,15 +45,15 @@ struct BlockHeader { - struct Block * next; - std::size_t size; - bool in_use; + struct Block * next; + std::size_t size; + bool in_use; }; struct Block { - BlockHeader hdr; - unsigned char data[1]; + BlockHeader hdr; + unsigned char data[1]; }; #define TRACE_MSG(val) std::cout << __FUNCTION__ << "(" << val << ") [" << __FILE__ << ":" << __LINE__ << "]" << std::endl; @@ -66,109 +66,109 @@ volatile std::size_t MemTotal = 0; static bool CAS(void * volatile * ptr, void * expected, void * new_value) { #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 - return OSAtomicCompareAndSwapPtr( expected, new_value, ptr ); + return OSAtomicCompareAndSwapPtr( expected, new_value, ptr ); #elif defined(_MSC_VER) - return expected == InterlockedCompareExchangePointer( ptr, new_value, expected ); + return expected == InterlockedCompareExchangePointer( ptr, new_value, expected ); #elif (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) > 40100 - return __sync_bool_compare_and_swap( ptr, expected, new_value ); + return __sync_bool_compare_and_swap( ptr, expected, new_value ); #endif } static void * GetMem(std::size_t size) { - // TRACE_MSG(size); - volatile Block * pBlock = NULL; - volatile Block * pNewNext = NULL; - - // do a lock-free update of the global next pointer - do - { - pBlock = pNext; - pNewNext = (volatile Block *)(pBlock->data + size); - - } while(! CAS((void * volatile *) &pNext, (void *) pBlock, (void *) pNewNext)); - - // if we get here, we safely carved out a block of memory in the - // memory pool... - - // initialize our block - pBlock->hdr.next = (Block *)(pBlock->data + size); - pBlock->hdr.size = size; - pBlock->hdr.in_use = true; - memset((void *) pBlock->data, 0, pBlock->hdr.size); - - // do a lock-free update of the global memory total - volatile size_t total = 0; - volatile size_t new_total = 0; - do - { - total = MemTotal; - new_total = total + size; - - } while (! CAS((void * volatile *) &MemTotal, (void *) total, (void *) new_total)); - - return (void *) pBlock->data; + // TRACE_MSG(size); + volatile Block * pBlock = NULL; + volatile Block * pNewNext = NULL; + + // do a lock-free update of the global next pointer + do + { + pBlock = pNext; + pNewNext = (volatile Block *)(pBlock->data + size); + + } while(! CAS((void * volatile *) &pNext, (void *) pBlock, (void *) pNewNext)); + + // if we get here, we safely carved out a block of memory in the + // memory pool... + + // initialize our block + pBlock->hdr.next = (Block *)(pBlock->data + size); + pBlock->hdr.size = size; + pBlock->hdr.in_use = true; + memset((void *) pBlock->data, 0, pBlock->hdr.size); + + // do a lock-free update of the global memory total + volatile size_t total = 0; + volatile size_t new_total = 0; + do + { + total = MemTotal; + new_total = total + size; + + } while (! CAS((void * volatile *) &MemTotal, (void *) total, (void *) new_total)); + + return (void *) pBlock->data; } static void FreeMem(void * p) { - // get the pointer to the block record - Block * pBlock = (Block *)((unsigned char *) p - sizeof(BlockHeader)); - - // TRACE_MSG(pBlock->hdr.size); - bool * cur_in_use = &(pBlock->hdr.in_use); - volatile bool in_use = false; - bool new_in_use = false; - do - { - in_use = pBlock->hdr.in_use; - } while (! CAS((void * volatile *) cur_in_use, (void *) in_use, (void *) new_in_use)); - - // do a lock-free update of the global memory total - volatile size_t total = 0; - volatile size_t new_total = 0; - do - { - total = MemTotal; - new_total = total - pBlock->hdr.size; - } while (! CAS((void * volatile *)&MemTotal, (void *) total, (void *) new_total)); + // get the pointer to the block record + Block * pBlock = (Block *)((unsigned char *) p - sizeof(BlockHeader)); + + // TRACE_MSG(pBlock->hdr.size); + bool * cur_in_use = &(pBlock->hdr.in_use); + volatile bool in_use = false; + bool new_in_use = false; + do + { + in_use = pBlock->hdr.in_use; + } while (! CAS((void * volatile *) cur_in_use, (void *) in_use, (void *) new_in_use)); + + // do a lock-free update of the global memory total + volatile size_t total = 0; + volatile size_t new_total = 0; + do + { + total = MemTotal; + new_total = total - pBlock->hdr.size; + } while (! CAS((void * volatile *)&MemTotal, (void *) total, (void *) new_total)); } std::size_t GetMemTotal() { - return MemTotal; + return MemTotal; } void * operator new(std::size_t size) //throw(std::bad_alloc) { - return GetMem( size ); + return GetMem( size ); } void * operator new[](std::size_t size) //throw(std::bad_alloc) { - return GetMem( size ); + return GetMem( size ); } void operator delete(void * p) throw() { - if (p) - { - FreeMem( p ); - } + if (p) + { + FreeMem( p ); + } } void operator delete[](void * p) throw() { - if (p) - { - FreeMem( p ); - } + if (p) + { + FreeMem( p ); + } } |