summaryrefslogtreecommitdiff
path: root/extmod/modbtree.c
diff options
context:
space:
mode:
Diffstat (limited to 'extmod/modbtree.c')
-rw-r--r--extmod/modbtree.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/extmod/modbtree.c b/extmod/modbtree.c
index 14dc8f348..2dd3a89b8 100644
--- a/extmod/modbtree.c
+++ b/extmod/modbtree.c
@@ -39,6 +39,7 @@
typedef struct _mp_obj_btree_t {
mp_obj_base_t base;
+ mp_obj_t stream; // retain a reference to prevent GC from reclaiming it
DB *db;
mp_obj_t start_key;
mp_obj_t end_key;
@@ -65,9 +66,10 @@ void __dbpanic(DB *db) {
mp_printf(&mp_plat_print, "__dbpanic(%p)\n", db);
}
-STATIC mp_obj_btree_t *btree_new(DB *db) {
+STATIC mp_obj_btree_t *btree_new(DB *db, mp_obj_t stream) {
mp_obj_btree_t *o = m_new_obj(mp_obj_btree_t);
o->base.type = &btree_type;
+ o->stream = stream;
o->db = db;
o->start_key = mp_const_none;
o->end_key = mp_const_none;
@@ -361,7 +363,7 @@ STATIC mp_obj_t mod_btree_open(size_t n_args, const mp_obj_t *pos_args, mp_map_t
if (db == NULL) {
mp_raise_OSError(errno);
}
- return MP_OBJ_FROM_PTR(btree_new(db));
+ return MP_OBJ_FROM_PTR(btree_new(db, pos_args[0]));
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_btree_open_obj, 1, mod_btree_open);