mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
Fixed off-by-one error WRT last read/write
This commit is contained in:
parent
ae46e39c45
commit
e29633f2b2
1 changed files with 7 additions and 7 deletions
14
gc.c
14
gc.c
|
@ -931,18 +931,18 @@ void gc_collector_trace()
|
|||
pthread_mutex_lock(&(m->lock));
|
||||
while (m->last_read < m->last_write) {
|
||||
clean = 0;
|
||||
(m->last_read)++;
|
||||
TODO: I think there is an off-by-one error here. inspect last read/write.
|
||||
is the code going one too many? per paper it is not, but based on
|
||||
logs it looks like it is reading past end of buffer. (ie, errors always seem
|
||||
to be on the last object traced, and checking the history, an object
|
||||
incorrectly marked at position X can be seen to have been stored at position
|
||||
X in a previous collection.
|
||||
//TODO: I think there is an off-by-one error here. inspect last read/write.
|
||||
//is the code going one too many? per paper it is not, but based on
|
||||
//logs it looks like it is reading past end of buffer. (ie, errors always seem
|
||||
//to be on the last object traced, and checking the history, an object
|
||||
//incorrectly marked at position X can be seen to have been stored at position
|
||||
//X in a previous collection.
|
||||
printf("gc_mark_black mark buffer %p, last_read = %d last_write = %d\n",
|
||||
(m->mark_buffer)[m->last_read],
|
||||
m->last_read, m->last_write);
|
||||
gc_mark_black((m->mark_buffer)[m->last_read]);
|
||||
gc_empty_collector_stack();
|
||||
(m->last_read)++; // Inc here to try to prevent off-by-one errors
|
||||
}
|
||||
pthread_mutex_unlock(&(m->lock));
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue