forked from chakra-core/ChakraCore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExpirableObject.cpp
More file actions
64 lines (54 loc) · 1.67 KB
/
Copy pathExpirableObject.cpp
File metadata and controls
64 lines (54 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#include "RuntimeBasePch.h"
ExpirableObject::ExpirableObject(ThreadContext* threadContext):
registrationHandle(0)
{
if (threadContext)
{
threadContext->RegisterExpirableObject(this);
}
}
void ExpirableObject::Finalize(bool isShutdown)
{
if (!isShutdown && this->GetRegistrationHandle() != nullptr)
{
ThreadContext* threadContext = ThreadContext::GetContextForCurrentThread();
threadContext->UnregisterExpirableObject(this);
}
}
void ExpirableObject::Dispose(bool isShutdown)
{
}
void * ExpirableObject::GetRegistrationHandle()
{
return (void *)(registrationHandle & ~1);
}
void
ExpirableObject::SetRegistrationHandle(void * registrationHandle)
{
Assert(this->GetRegistrationHandle() == nullptr);
Assert(((intptr_t)registrationHandle & 1) == 0);
Assert(registrationHandle != nullptr);
this->registrationHandle |= (intptr_t)registrationHandle;
}
void
ExpirableObject::ClearRegistrationHandle()
{
Assert(this->GetRegistrationHandle() != nullptr);
this->registrationHandle = this->registrationHandle & 1;
}
void ExpirableObject::EnterExpirableCollectMode()
{
this->registrationHandle &= ~1;
}
bool ExpirableObject::IsObjectUsed()
{
return (this->registrationHandle & 1);
}
void ExpirableObject::SetIsObjectUsed()
{
this->registrationHandle |= 1;
}