Skip to content

Commit 3031a11

Browse files
authored
Fix LCache invalidation issue for native properties during GC. (#2530)
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg [email protected]
1 parent 6c21c08 commit 3031a11

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

jerry-core/ecma/base/ecma-gc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,8 @@ ecma_gc_free_object (ecma_object_t *object_p) /**< object to free */
545545
{
546546
ecma_gc_free_native_pointer (property_p);
547547
}
548-
else if (prop_iter_p->types[i] != ECMA_PROPERTY_TYPE_DELETED)
548+
549+
if (prop_iter_p->types[i] != ECMA_PROPERTY_TYPE_DELETED)
549550
{
550551
ecma_free_property (object_p, name_cp, property_p);
551552
}

jerry-core/ecma/base/ecma-helpers.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -764,8 +764,10 @@ ecma_free_property (ecma_object_t *object_p, /**< object the property belongs to
764764
{
765765
JERRY_ASSERT (ECMA_PROPERTY_GET_TYPE (*property_p) == ECMA_PROPERTY_TYPE_INTERNAL);
766766

767-
/* Currently no internal property can reach this point. */
768-
JERRY_UNREACHABLE ();
767+
/* Must be a native pointer. */
768+
JERRY_ASSERT (ECMA_PROPERTY_GET_NAME_TYPE (*property_p) == ECMA_DIRECT_STRING_MAGIC
769+
&& (name_cp == LIT_INTERNAL_MAGIC_STRING_NATIVE_POINTER));
770+
break;
769771
}
770772
}
771773

jerry-core/ecma/base/ecma-lcache.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ ecma_lcache_invalidate (ecma_object_t *object_p, /**< object */
196196
JERRY_ASSERT (object_p != NULL);
197197
JERRY_ASSERT (prop_p != NULL && ecma_is_property_lcached (prop_p));
198198
JERRY_ASSERT (ECMA_PROPERTY_GET_TYPE (*prop_p) == ECMA_PROPERTY_TYPE_NAMEDDATA
199-
|| ECMA_PROPERTY_GET_TYPE (*prop_p) == ECMA_PROPERTY_TYPE_NAMEDACCESSOR);
199+
|| ECMA_PROPERTY_GET_TYPE (*prop_p) == ECMA_PROPERTY_TYPE_NAMEDACCESSOR
200+
|| ECMA_PROPERTY_GET_TYPE (*prop_p) == ECMA_PROPERTY_TYPE_INTERNAL);
200201

201202
jmem_cpointer_t object_cp;
202203
ECMA_SET_NON_NULL_POINTER (object_cp, object_p);

0 commit comments

Comments
 (0)