[K/N] Remove marker check from mark phase ^KT-54163
Markers can't appear in object fields. Merge-request: KT-MR-7201 Merged-by: Alexander Shabalin <Alexander.Shabalin@jetbrains.com>
This commit is contained in:
committed by
Space
parent
64c9a9f137
commit
822e341d76
@@ -52,14 +52,13 @@ MarkStats Mark(typename Traits::MarkQueue& markQueue) noexcept {
|
||||
stats.aliveHeapSetBytes += mm::GetAllocatedHeapSize(top);
|
||||
|
||||
traverseReferredObjects(top, [&](ObjHeader* field) noexcept {
|
||||
if (!isNullOrMarker(field) && field->heap()) {
|
||||
if (field->heap()) {
|
||||
Traits::enqueue(markQueue, field);
|
||||
}
|
||||
});
|
||||
|
||||
if (auto* extraObjectData = mm::ExtraObjectData::Get(top)) {
|
||||
auto weakCounter = extraObjectData->GetWeakReferenceCounter();
|
||||
if (!isNullOrMarker(weakCounter)) {
|
||||
if (auto weakCounter = extraObjectData->GetWeakReferenceCounter()) {
|
||||
RuntimeAssert(
|
||||
weakCounter->heap(), "Weak counter must be a heap object. object=%p counter=%p permanent=%d local=%d", top,
|
||||
weakCounter, weakCounter->permanent(), weakCounter->local());
|
||||
@@ -133,7 +132,7 @@ void collectRootSetForThread(typename Traits::MarkQueue& markQueue, mm::ThreadDa
|
||||
} else {
|
||||
traverseReferredObjects(object, [&](ObjHeader* field) noexcept {
|
||||
// Each permanent and stack object has own entry in the root set.
|
||||
if (field->heap() && !isNullOrMarker(field)) {
|
||||
if (field->heap()) {
|
||||
Traits::enqueue(markQueue, field);
|
||||
}
|
||||
});
|
||||
@@ -165,7 +164,7 @@ void collectRootSetGlobals(typename Traits::MarkQueue& markQueue) noexcept {
|
||||
} else {
|
||||
traverseReferredObjects(object, [&](ObjHeader* field) noexcept {
|
||||
// Each permanent and stack object has own entry in the root set.
|
||||
if (field->heap() && !isNullOrMarker(field)) {
|
||||
if (field->heap()) {
|
||||
Traits::enqueue(markQueue, field);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -227,7 +227,7 @@ TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleCharArray) {
|
||||
|
||||
TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectWithInvalidFields) {
|
||||
Object object;
|
||||
object->field1 = kInitializingSingleton;
|
||||
object->field1 = nullptr;
|
||||
|
||||
auto stats = Mark({object});
|
||||
|
||||
@@ -236,7 +236,7 @@ TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectWithInvalidFields) {
|
||||
|
||||
TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectArrayWithInvalidFields) {
|
||||
ObjectArray array;
|
||||
array.elements()[0] = kInitializingSingleton;
|
||||
array.elements()[0] = nullptr;
|
||||
|
||||
auto stats = Mark({array});
|
||||
|
||||
@@ -317,7 +317,7 @@ TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleCharArrayWithWeakCounter) {
|
||||
TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectWithInvalidFieldsWithWeakCounter) {
|
||||
Object weakCounter;
|
||||
Object object;
|
||||
object->field1 = kInitializingSingleton;
|
||||
object->field1 = nullptr;
|
||||
weakCounter->field1 = object.header();
|
||||
object.InstallWeakCounter(weakCounter);
|
||||
|
||||
@@ -329,7 +329,7 @@ TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectWithInvalidFieldsWithWeakCount
|
||||
TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectArrayWithInvalidFieldsWithWeakCounter) {
|
||||
Object weakCounter;
|
||||
ObjectArray array;
|
||||
array.elements()[0] = kInitializingSingleton;
|
||||
array.elements()[0] = nullptr;
|
||||
weakCounter->field1 = array.header();
|
||||
array.InstallWeakCounter(weakCounter);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user