Removed type-punning pointer casts around st_data_t
This commit is contained in:
parent
52dc0632fa
commit
0c4bbb46f1
25
gc.c
25
gc.c
@ -2548,14 +2548,14 @@ make_io_zombie(rb_objspace_t *objspace, VALUE obj)
|
|||||||
static void
|
static void
|
||||||
obj_free_object_id(rb_objspace_t *objspace, VALUE obj)
|
obj_free_object_id(rb_objspace_t *objspace, VALUE obj)
|
||||||
{
|
{
|
||||||
VALUE id;
|
st_data_t o = (st_data_t)obj, id;
|
||||||
|
|
||||||
GC_ASSERT(FL_TEST(obj, FL_SEEN_OBJ_ID));
|
GC_ASSERT(FL_TEST(obj, FL_SEEN_OBJ_ID));
|
||||||
FL_UNSET(obj, FL_SEEN_OBJ_ID);
|
FL_UNSET(obj, FL_SEEN_OBJ_ID);
|
||||||
|
|
||||||
if (st_delete(objspace->obj_to_id_tbl, (st_data_t *)&obj, &id)) {
|
if (st_delete(objspace->obj_to_id_tbl, &o, &id)) {
|
||||||
GC_ASSERT(id);
|
GC_ASSERT(id);
|
||||||
st_delete(objspace->id_to_obj_tbl, (st_data_t *)&id, NULL);
|
st_delete(objspace->id_to_obj_tbl, &id, NULL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rb_bug("Object ID seen, but not in mapping table: %s\n", obj_info(obj));
|
rb_bug("Object ID seen, but not in mapping table: %s\n", obj_info(obj));
|
||||||
@ -5760,8 +5760,10 @@ static int
|
|||||||
allrefs_add(struct allrefs *data, VALUE obj)
|
allrefs_add(struct allrefs *data, VALUE obj)
|
||||||
{
|
{
|
||||||
struct reflist *refs;
|
struct reflist *refs;
|
||||||
|
st_data_t r;
|
||||||
|
|
||||||
if (st_lookup(data->references, obj, (st_data_t *)&refs)) {
|
if (st_lookup(data->references, obj, &r)) {
|
||||||
|
refs = (struct reflist *)r;
|
||||||
reflist_add(refs, data->root_obj);
|
reflist_add(refs, data->root_obj);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -7568,7 +7570,6 @@ gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj)
|
|||||||
case T_MOVED:
|
case T_MOVED:
|
||||||
case T_ZOMBIE:
|
case T_ZOMBIE:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
|
||||||
case T_SYMBOL:
|
case T_SYMBOL:
|
||||||
if (DYNAMIC_SYM_P(obj) && (RSYMBOL(obj)->id & ~ID_SCOPE_MASK)) {
|
if (DYNAMIC_SYM_P(obj) && (RSYMBOL(obj)->id & ~ID_SCOPE_MASK)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -7598,7 +7599,6 @@ gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return !RVALUE_PINNED(obj);
|
return !RVALUE_PINNED(obj);
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
rb_bug("gc_is_moveable_obj: unreachable (%d)", (int)BUILTIN_TYPE(obj));
|
rb_bug("gc_is_moveable_obj: unreachable (%d)", (int)BUILTIN_TYPE(obj));
|
||||||
@ -7641,14 +7641,14 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, VALUE moved_list)
|
|||||||
rb_mv_generic_ivar((VALUE)src, (VALUE)dest);
|
rb_mv_generic_ivar((VALUE)src, (VALUE)dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE id;
|
st_data_t srcid = (st_data_t)src, id;
|
||||||
|
|
||||||
/* If the source object's object_id has been seen, we need to update
|
/* If the source object's object_id has been seen, we need to update
|
||||||
* the object to object id mapping. */
|
* the object to object id mapping. */
|
||||||
if (st_lookup(objspace->obj_to_id_tbl, (VALUE)src, &id)) {
|
if (st_lookup(objspace->obj_to_id_tbl, srcid, &id)) {
|
||||||
gc_report(4, objspace, "Moving object with seen id: %p -> %p\n", (void *)src, (void *)dest);
|
gc_report(4, objspace, "Moving object with seen id: %p -> %p\n", (void *)src, (void *)dest);
|
||||||
st_delete(objspace->obj_to_id_tbl, (st_data_t *)&src, 0);
|
st_delete(objspace->obj_to_id_tbl, &srcid, 0);
|
||||||
st_insert(objspace->obj_to_id_tbl, (VALUE)dest, id);
|
st_insert(objspace->obj_to_id_tbl, (st_data_t)dest, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move the object */
|
/* Move the object */
|
||||||
@ -10008,14 +10008,15 @@ objspace_xfree(rb_objspace_t *objspace, void *ptr, size_t old_size)
|
|||||||
found:;
|
found:;
|
||||||
|
|
||||||
{
|
{
|
||||||
st_data_t key = (st_data_t)info->file;
|
st_data_t key = (st_data_t)info->file, d;
|
||||||
size_t *data;
|
size_t *data;
|
||||||
|
|
||||||
if (malloc_info_file_table == NULL) {
|
if (malloc_info_file_table == NULL) {
|
||||||
malloc_info_file_table = st_init_numtable_with_size(1024);
|
malloc_info_file_table = st_init_numtable_with_size(1024);
|
||||||
}
|
}
|
||||||
if (st_lookup(malloc_info_file_table, key, (st_data_t *)&data)) {
|
if (st_lookup(malloc_info_file_table, key, &d)) {
|
||||||
/* hit */
|
/* hit */
|
||||||
|
data = (size_t *)d;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
data = malloc(xmalloc2_size(2, sizeof(size_t)));
|
data = malloc(xmalloc2_size(2, sizeof(size_t)));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user