File tree Expand file tree Collapse file tree 1 file changed +3
-1
lines changed Expand file tree Collapse file tree 1 file changed +3
-1
lines changed Original file line number Diff line number Diff line change @@ -1013,13 +1013,15 @@ bool gc_never_free(void *ptr) {
1013
1013
// Pointers are stored in a linked list where each block is BYTES_PER_BLOCK long and the first
1014
1014
// pointer is the next block of pointers.
1015
1015
void * * current_reference_block = MP_STATE_MEM (permanent_pointers );
1016
+ void * * last_reference_block = NULL ;
1016
1017
while (current_reference_block != NULL ) {
1017
1018
for (size_t i = 1 ; i < BYTES_PER_BLOCK / sizeof (void * ); i ++ ) {
1018
1019
if (current_reference_block [i ] == NULL ) {
1019
1020
current_reference_block [i ] = ptr ;
1020
1021
return true;
1021
1022
}
1022
1023
}
1024
+ last_reference_block = current_reference_block ; // keep a record of last "proper" reference block
1023
1025
current_reference_block = current_reference_block [0 ];
1024
1026
}
1025
1027
void * * next_block = gc_alloc (BYTES_PER_BLOCK , false, true);
@@ -1029,7 +1031,7 @@ bool gc_never_free(void *ptr) {
1029
1031
if (MP_STATE_MEM (permanent_pointers ) == NULL ) {
1030
1032
MP_STATE_MEM (permanent_pointers ) = next_block ;
1031
1033
} else {
1032
- current_reference_block [0 ] = next_block ;
1034
+ last_reference_block [0 ] = next_block ;
1033
1035
}
1034
1036
next_block [1 ] = ptr ;
1035
1037
return true;
You can’t perform that action at this time.
0 commit comments