ext/extralite/iterator.c in extralite-bundle-2.5 vs ext/extralite/iterator.c in extralite-bundle-2.6
- old
+ new
@@ -17,16 +17,21 @@
return sizeof(Iterator_t);
}
static void Iterator_mark(void *ptr) {
Iterator_t *iterator = ptr;
- rb_gc_mark(iterator->query);
+ rb_gc_mark_movable(iterator->query);
}
+static void Iterator_compact(void *ptr) {
+ Iterator_t *iterator = ptr;
+ iterator->query = rb_gc_location(iterator->query);
+}
+
static const rb_data_type_t Iterator_type = {
"Iterator",
- {Iterator_mark, free, Iterator_size,},
- 0, 0, RUBY_TYPED_FREE_IMMEDIATELY
+ {Iterator_mark, free, Iterator_size, Iterator_compact},
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
};
static VALUE Iterator_allocate(VALUE klass) {
Iterator_t *iterator = ALLOC(Iterator_t);
iterator->query = Qnil;