static int expand_slot_table(struct slot_table *slot_table)
{
unsigned int new_size, old_size;
struct slot_table new_slot_table;
int r;
old_size = slot_table->slots_size;
new_size = old_size + BASE_OBJECT_NUM;
r = slot_table_init(&new_slot_table, new_size);
if (r < 0)
return r;
memcpy(new_slot_table.slots, slot_table->slots,
old_size * sizeof(*slot_table->slots));
memcpy(new_slot_table.slots_bmp, slot_table->slots_bmp,
BITS_TO_LONGS(old_size) * sizeof(unsigned long));
memcpy(new_slot_table.full_slots_bmp, slot_table->full_slots_bmp,
BITS_TO_LONGS(BITS_TO_LONGS(old_size)) * sizeof(unsigned long));
slot_table->slots_size = new_size;
slot_table->slots = new_slot_table.slots;
slot_table->slots_bmp = new_slot_table.slots_bmp;
slot_table->full_slots_bmp = new_slot_table.full_slots_bmp;
return 0;
}
在看源码的时候我发现expand_slot_table函数的行为是申请一个新的更大的slot_table然后用memcpy将老的slot_table复制过去,但是对于老的slot_table的空间好像没有进行处理,这样是不是会造成内存泄漏