Skip to content

Commit 106bb9d

Browse files
committed
[MERGE #3253 @leirocks] use throw allocator for dynamicProfileInfoMapSaving
Merge pull request #3253 from leirocks:dynprofilenothrow can't use nothrow allocator because our BaseDictionary does not support that. need to handle the exception because saving dynamic profile info is in destructing code path.
2 parents ca581d9 + 66f01c2 commit 106bb9d

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

lib/Runtime/Language/SourceDynamicProfileManager.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,19 +329,33 @@ namespace Js
329329
dynamicProfileInfoMapSaving.Reset();
330330
}
331331

332+
void SourceDynamicProfileManager::AddItem(LocalFunctionId functionId, DynamicProfileInfo *info)
333+
{
334+
try
335+
{
336+
// our BaseDictionary does not allow nothrow allocator
337+
AUTO_NESTED_HANDLED_EXCEPTION_TYPE(ExceptionType_OutOfMemory);
338+
dynamicProfileInfoMapSaving.Item(functionId, info);
339+
}
340+
catch (Js::OutOfMemoryException&)
341+
{
342+
Output::Print(_u("Hit OOM while saving dynamic profile info\n"));
343+
}
344+
}
345+
332346
void SourceDynamicProfileManager::CopySavingData()
333347
{
334348
dynamicProfileInfoMap.Map([&](LocalFunctionId functionId, DynamicProfileInfo *info)
335349
{
336-
dynamicProfileInfoMapSaving.Item(functionId, info);
350+
this->AddItem(functionId, info);
337351
});
338352
}
339353

340354
void
341355
SourceDynamicProfileManager::SaveDynamicProfileInfo(LocalFunctionId functionId, DynamicProfileInfo * dynamicProfileInfo)
342356
{
343357
Assert(dynamicProfileInfo->GetFunctionBody()->HasExecutionDynamicProfileInfo());
344-
dynamicProfileInfoMapSaving.Item(functionId, dynamicProfileInfo);
358+
this->AddItem(functionId, dynamicProfileInfo);
345359
}
346360

347361
template <typename T>

lib/Runtime/Language/SourceDynamicProfileManager.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace Js
2323
public:
2424
SourceDynamicProfileManager(Recycler* allocator) : isNonCachableScript(false), cachedStartupFunctions(nullptr), recycler(allocator),
2525
#ifdef DYNAMIC_PROFILE_STORAGE
26-
dynamicProfileInfoMapSaving(&NoThrowHeapAllocator::Instance),
26+
dynamicProfileInfoMapSaving(&HeapAllocator::Instance),
2727
#endif
2828
dynamicProfileInfoMap(allocator), startupFunctions(nullptr), profileDataCache(nullptr)
2929
{
@@ -53,11 +53,12 @@ namespace Js
5353
FieldNoBarrier(Recycler*) recycler;
5454

5555
#ifdef DYNAMIC_PROFILE_STORAGE
56-
typedef JsUtil::BaseDictionary<LocalFunctionId, DynamicProfileInfo *, NoThrowHeapAllocator> DynamicProfileInfoMapSavingType;
56+
typedef JsUtil::BaseDictionary<LocalFunctionId, DynamicProfileInfo *, HeapAllocator> DynamicProfileInfoMapSavingType;
5757
FieldNoBarrier(DynamicProfileInfoMapSavingType) dynamicProfileInfoMapSaving;
5858

5959
void SaveDynamicProfileInfo(LocalFunctionId functionId, DynamicProfileInfo * dynamicProfileInfo);
6060
void SaveToDynamicProfileStorage(char16 const * url);
61+
void AddItem(LocalFunctionId functionId, DynamicProfileInfo *info);
6162
template <typename T>
6263
static SourceDynamicProfileManager * Deserialize(T * reader, Recycler* allocator);
6364
template <typename T>

0 commit comments

Comments
 (0)