rocksdb-native 2.6.6 → 2.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CMakeLists.txt CHANGED
@@ -7,7 +7,7 @@ find_package(cmake-npm REQUIRED PATHS node_modules/cmake-npm)
7
7
 
8
8
  project(rocksdb_native C CXX)
9
9
 
10
- fetch_package("github:holepunchto/librocksdb#e73d912")
10
+ fetch_package("github:holepunchto/librocksdb#2d81fc0")
11
11
 
12
12
  add_bare_module(rocksdb_native_bare)
13
13
 
package/binding.c CHANGED
@@ -63,6 +63,11 @@ typedef struct {
63
63
  js_ref_t *on_open;
64
64
  js_ref_t *on_close;
65
65
  js_ref_t *on_read;
66
+
67
+ bool closing;
68
+ bool exiting;
69
+
70
+ js_deferred_teardown_t *teardown;
66
71
  } rocksdb_native_iterator_t;
67
72
 
68
73
  typedef struct {
@@ -114,30 +119,40 @@ rocksdb_native__on_close(rocksdb_close_t *handle, int status) {
114
119
 
115
120
  js_deferred_teardown_t *teardown = db->teardown;
116
121
 
117
- js_handle_scope_t *scope;
118
- err = js_open_handle_scope(env, &scope);
119
- assert(err == 0);
122
+ if (db->exiting) {
123
+ if (db->closing) {
124
+ err = js_delete_reference(env, req->on_close);
125
+ assert(err == 0);
120
126
 
121
- js_value_t *ctx;
122
- err = js_get_reference_value(env, req->ctx, &ctx);
123
- assert(err == 0);
127
+ err = js_delete_reference(env, req->ctx);
128
+ assert(err == 0);
129
+ } else {
130
+ free(req);
131
+ }
132
+ } else {
133
+ js_handle_scope_t *scope;
134
+ err = js_open_handle_scope(env, &scope);
135
+ assert(err == 0);
124
136
 
125
- js_value_t *cb;
126
- err = js_get_reference_value(env, req->on_close, &cb);
127
- assert(err == 0);
137
+ js_value_t *ctx;
138
+ err = js_get_reference_value(env, req->ctx, &ctx);
139
+ assert(err == 0);
128
140
 
129
- err = js_delete_reference(env, req->on_close);
130
- assert(err == 0);
141
+ js_value_t *cb;
142
+ err = js_get_reference_value(env, req->on_close, &cb);
143
+ assert(err == 0);
131
144
 
132
- err = js_delete_reference(env, req->ctx);
133
- assert(err == 0);
145
+ err = js_delete_reference(env, req->on_close);
146
+ assert(err == 0);
147
+
148
+ err = js_delete_reference(env, req->ctx);
149
+ assert(err == 0);
134
150
 
135
- if (!db->exiting) {
136
151
  js_call_function_with_checkpoint(env, ctx, cb, 0, NULL, NULL);
137
- }
138
152
 
139
- err = js_close_handle_scope(env, scope);
140
- assert(err == 0);
153
+ err = js_close_handle_scope(env, scope);
154
+ assert(err == 0);
155
+ }
141
156
 
142
157
  err = js_finish_deferred_teardown_callback(teardown);
143
158
  assert(err == 0);
@@ -155,40 +170,46 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
155
170
 
156
171
  js_env_t *env = req->env;
157
172
 
158
- js_handle_scope_t *scope;
159
- err = js_open_handle_scope(env, &scope);
160
- assert(err == 0);
161
-
162
- js_value_t *ctx;
163
- err = js_get_reference_value(env, req->ctx, &ctx);
164
- assert(err == 0);
165
-
166
- js_value_t *cb;
167
- err = js_get_reference_value(env, req->on_open, &cb);
168
- assert(err == 0);
173
+ if (db->exiting) {
174
+ err = js_delete_reference(env, req->on_open);
175
+ assert(err == 0);
169
176
 
170
- err = js_delete_reference(env, req->on_open);
171
- assert(err == 0);
177
+ err = js_delete_reference(env, req->ctx);
178
+ assert(err == 0);
179
+ } else {
180
+ js_handle_scope_t *scope;
181
+ err = js_open_handle_scope(env, &scope);
182
+ assert(err == 0);
172
183
 
173
- err = js_delete_reference(env, req->ctx);
174
- assert(err == 0);
184
+ js_value_t *ctx;
185
+ err = js_get_reference_value(env, req->ctx, &ctx);
186
+ assert(err == 0);
175
187
 
176
- js_value_t *error;
188
+ js_value_t *cb;
189
+ err = js_get_reference_value(env, req->on_open, &cb);
190
+ assert(err == 0);
177
191
 
178
- if (req->handle.error) {
179
- err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
192
+ err = js_delete_reference(env, req->on_open);
180
193
  assert(err == 0);
181
- } else {
182
- err = js_get_null(env, &error);
194
+
195
+ err = js_delete_reference(env, req->ctx);
183
196
  assert(err == 0);
184
- }
185
197
 
186
- if (!db->exiting) {
198
+ js_value_t *error;
199
+
200
+ if (req->handle.error) {
201
+ err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
202
+ assert(err == 0);
203
+ } else {
204
+ err = js_get_null(env, &error);
205
+ assert(err == 0);
206
+ }
207
+
187
208
  js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
188
- }
189
209
 
190
- err = js_close_handle_scope(env, scope);
191
- assert(err == 0);
210
+ err = js_close_handle_scope(env, scope);
211
+ assert(err == 0);
212
+ }
192
213
  }
193
214
 
194
215
  static void
@@ -203,36 +224,12 @@ rocksdb_native__on_teardown(js_deferred_teardown_t *handle, void *data) {
203
224
 
204
225
  if (db->closing) return;
205
226
 
206
- js_handle_scope_t *scope;
207
- err = js_open_handle_scope(env, &scope);
208
- assert(err == 0);
209
-
210
- js_value_t *ctx;
211
-
212
- rocksdb_native_close_t *req;
213
- err = js_create_arraybuffer(env, sizeof(rocksdb_native_close_t), (void **) &req, &ctx);
214
- assert(err == 0);
227
+ rocksdb_native_close_t *req = malloc(sizeof(rocksdb_native_close_t));
215
228
 
216
- req->env = env;
217
229
  req->handle.data = (void *) req;
218
230
 
219
- err = js_create_reference(env, ctx, 1, &req->ctx);
220
- assert(err == 0);
221
-
222
- js_value_t *on_close;
223
- err = js_get_null(env, &on_close);
224
- assert(err == 0);
225
-
226
- err = js_create_reference(env, on_close, 1, &req->on_close);
227
- assert(err == 0);
228
-
229
- db->closing = true;
230
-
231
231
  err = rocksdb_close(&db->handle, &req->handle, rocksdb_native__on_close);
232
232
  assert(err == 0);
233
-
234
- err = js_close_handle_scope(env, scope);
235
- assert(err == 0);
236
233
  }
237
234
 
238
235
  static js_value_t *
@@ -371,14 +368,6 @@ static js_value_t *
371
368
  rocksdb_native_iterator_init(js_env_t *env, js_callback_info_t *info) {
372
369
  int err;
373
370
 
374
- size_t argc = 4;
375
- js_value_t *argv[4];
376
-
377
- err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
378
- assert(err == 0);
379
-
380
- assert(argc == 4);
381
-
382
371
  js_value_t *handle;
383
372
 
384
373
  rocksdb_native_iterator_t *req;
@@ -386,20 +375,10 @@ rocksdb_native_iterator_init(js_env_t *env, js_callback_info_t *info) {
386
375
  assert(err == 0);
387
376
 
388
377
  req->env = env;
378
+ req->closing = false;
379
+ req->exiting = false;
389
380
  req->handle.data = (void *) req;
390
381
 
391
- err = js_create_reference(env, argv[0], 1, &req->ctx);
392
- assert(err == 0);
393
-
394
- err = js_create_reference(env, argv[1], 1, &req->on_open);
395
- assert(err == 0);
396
-
397
- err = js_create_reference(env, argv[2], 1, &req->on_close);
398
- assert(err == 0);
399
-
400
- err = js_create_reference(env, argv[3], 1, &req->on_read);
401
- assert(err == 0);
402
-
403
382
  return handle;
404
383
  }
405
384
 
@@ -440,6 +419,75 @@ rocksdb_native_iterator_buffer(js_env_t *env, js_callback_info_t *info) {
440
419
  return handle;
441
420
  }
442
421
 
422
+ static void
423
+ rocksdb_native__on_iterator_close(rocksdb_iterator_t *handle, int status) {
424
+ int err;
425
+
426
+ assert(status == 0);
427
+
428
+ rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
429
+
430
+ js_env_t *env = req->env;
431
+
432
+ js_deferred_teardown_t *teardown = req->teardown;
433
+
434
+ if (req->exiting) {
435
+ err = js_delete_reference(env, req->on_open);
436
+ assert(err == 0);
437
+
438
+ err = js_delete_reference(env, req->on_close);
439
+ assert(err == 0);
440
+
441
+ err = js_delete_reference(env, req->on_read);
442
+ assert(err == 0);
443
+
444
+ err = js_delete_reference(env, req->ctx);
445
+ assert(err == 0);
446
+ } else {
447
+ js_handle_scope_t *scope;
448
+ err = js_open_handle_scope(env, &scope);
449
+ assert(err == 0);
450
+
451
+ js_value_t *ctx;
452
+ err = js_get_reference_value(env, req->ctx, &ctx);
453
+ assert(err == 0);
454
+
455
+ js_value_t *cb;
456
+ err = js_get_reference_value(env, req->on_close, &cb);
457
+ assert(err == 0);
458
+
459
+ err = js_delete_reference(env, req->on_open);
460
+ assert(err == 0);
461
+
462
+ err = js_delete_reference(env, req->on_close);
463
+ assert(err == 0);
464
+
465
+ err = js_delete_reference(env, req->on_read);
466
+ assert(err == 0);
467
+
468
+ err = js_delete_reference(env, req->ctx);
469
+ assert(err == 0);
470
+
471
+ js_value_t *error;
472
+
473
+ if (req->handle.error) {
474
+ err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
475
+ assert(err == 0);
476
+ } else {
477
+ err = js_get_null(env, &error);
478
+ assert(err == 0);
479
+ }
480
+
481
+ js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
482
+
483
+ err = js_close_handle_scope(env, scope);
484
+ assert(err == 0);
485
+ }
486
+
487
+ err = js_finish_deferred_teardown_callback(teardown);
488
+ assert(err == 0);
489
+ }
490
+
443
491
  static void
444
492
  rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
445
493
  int err;
@@ -448,7 +496,7 @@ rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
448
496
 
449
497
  rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
450
498
 
451
- rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
499
+ if (req->exiting) return;
452
500
 
453
501
  js_env_t *env = req->env;
454
502
 
@@ -474,25 +522,37 @@ rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
474
522
  assert(err == 0);
475
523
  }
476
524
 
477
- if (!db->exiting) {
478
- js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
479
- }
525
+ js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
480
526
 
481
527
  err = js_close_handle_scope(env, scope);
482
528
  assert(err == 0);
483
529
  }
484
530
 
531
+ static void
532
+ rocksdb_native__on_iterator_teardown(js_deferred_teardown_t *handle, void *data) {
533
+ int err;
534
+
535
+ rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) data;
536
+
537
+ req->exiting = true;
538
+
539
+ if (req->closing) return;
540
+
541
+ err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close);
542
+ assert(err == 0);
543
+ }
544
+
485
545
  static js_value_t *
486
546
  rocksdb_native_iterator_open(js_env_t *env, js_callback_info_t *info) {
487
547
  int err;
488
548
 
489
- size_t argc = 8;
490
- js_value_t *argv[8];
549
+ size_t argc = 12;
550
+ js_value_t *argv[12];
491
551
 
492
552
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
493
553
  assert(err == 0);
494
554
 
495
- assert(argc == 8);
555
+ assert(argc == 12);
496
556
 
497
557
  rocksdb_native_t *db;
498
558
  err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
@@ -533,64 +593,25 @@ rocksdb_native_iterator_open(js_env_t *env, js_callback_info_t *info) {
533
593
  assert(err == 0);
534
594
  }
535
595
 
536
- err = rocksdb_iterator_open(&db->handle, &req->handle, range, reverse, &options, rocksdb_native__on_iterator_open);
596
+ err = js_create_reference(env, argv[8], 1, &req->ctx);
537
597
  assert(err == 0);
538
598
 
539
- return NULL;
540
- }
541
-
542
- static void
543
- rocksdb_native__on_iterator_close(rocksdb_iterator_t *handle, int status) {
544
- int err;
545
-
546
- assert(status == 0);
547
-
548
- rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
549
-
550
- rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
551
-
552
- js_env_t *env = req->env;
553
-
554
- js_handle_scope_t *scope;
555
- err = js_open_handle_scope(env, &scope);
599
+ err = js_create_reference(env, argv[9], 1, &req->on_open);
556
600
  assert(err == 0);
557
601
 
558
- js_value_t *ctx;
559
- err = js_get_reference_value(env, req->ctx, &ctx);
602
+ err = js_create_reference(env, argv[10], 1, &req->on_close);
560
603
  assert(err == 0);
561
604
 
562
- js_value_t *cb;
563
- err = js_get_reference_value(env, req->on_close, &cb);
564
- assert(err == 0);
565
-
566
- err = js_delete_reference(env, req->on_open);
567
- assert(err == 0);
568
-
569
- err = js_delete_reference(env, req->on_close);
605
+ err = js_create_reference(env, argv[11], 1, &req->on_read);
570
606
  assert(err == 0);
571
607
 
572
- err = js_delete_reference(env, req->on_read);
608
+ err = rocksdb_iterator_open(&db->handle, &req->handle, range, reverse, &options, rocksdb_native__on_iterator_open);
573
609
  assert(err == 0);
574
610
 
575
- err = js_delete_reference(env, req->ctx);
611
+ err = js_add_deferred_teardown_callback(env, rocksdb_native__on_iterator_teardown, (void *) req, &req->teardown);
576
612
  assert(err == 0);
577
613
 
578
- js_value_t *error;
579
-
580
- if (req->handle.error) {
581
- err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
582
- assert(err == 0);
583
- } else {
584
- err = js_get_null(env, &error);
585
- assert(err == 0);
586
- }
587
-
588
- if (!db->exiting) {
589
- js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
590
- }
591
-
592
- err = js_close_handle_scope(env, scope);
593
- assert(err == 0);
614
+ return NULL;
594
615
  }
595
616
 
596
617
  static js_value_t *
@@ -609,6 +630,8 @@ rocksdb_native_iterator_close(js_env_t *env, js_callback_info_t *info) {
609
630
  err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
610
631
  assert(err == 0);
611
632
 
633
+ req->closing = true;
634
+
612
635
  err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close);
613
636
  assert(err == 0);
614
637
 
@@ -625,66 +648,76 @@ rocksdb_native__on_iterator_read(rocksdb_iterator_t *handle, int status) {
625
648
 
626
649
  rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
627
650
 
628
- js_env_t *env = req->env;
629
-
630
- js_handle_scope_t *scope;
631
- err = js_open_handle_scope(env, &scope);
632
- assert(err == 0);
633
-
634
- js_value_t *ctx;
635
- err = js_get_reference_value(env, req->ctx, &ctx);
636
- assert(err == 0);
651
+ size_t len = req->handle.len;
637
652
 
638
- js_value_t *cb;
639
- err = js_get_reference_value(env, req->on_read, &cb);
640
- assert(err == 0);
653
+ if (db->exiting) {
654
+ if (status == 0 && req->handle.error == NULL) {
655
+ for (size_t i = 0; i < len; i++) {
656
+ js_value_t *result;
641
657
 
642
- size_t len = req->handle.len;
658
+ rocksdb_slice_destroy(&req->keys[i]);
643
659
 
644
- js_value_t *keys;
645
- err = js_create_array_with_length(env, len, &keys);
646
- assert(err == 0);
660
+ rocksdb_slice_destroy(&req->values[i]);
661
+ }
662
+ }
663
+ } else {
664
+ js_env_t *env = req->env;
647
665
 
648
- js_value_t *values;
649
- err = js_create_array_with_length(env, len, &values);
650
- assert(err == 0);
666
+ js_handle_scope_t *scope;
667
+ err = js_open_handle_scope(env, &scope);
668
+ assert(err == 0);
651
669
 
652
- js_value_t *error;
670
+ js_value_t *ctx;
671
+ err = js_get_reference_value(env, req->ctx, &ctx);
672
+ assert(err == 0);
653
673
 
654
- if (req->handle.error) {
655
- err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
674
+ js_value_t *cb;
675
+ err = js_get_reference_value(env, req->on_read, &cb);
656
676
  assert(err == 0);
657
- } else {
658
- err = js_get_null(env, &error);
677
+
678
+ js_value_t *keys;
679
+ err = js_create_array_with_length(env, len, &keys);
659
680
  assert(err == 0);
660
681
 
661
- for (size_t i = 0; i < len; i++) {
662
- js_value_t *result;
682
+ js_value_t *values;
683
+ err = js_create_array_with_length(env, len, &values);
684
+ assert(err == 0);
663
685
 
664
- rocksdb_slice_t *key = &req->keys[i];
686
+ js_value_t *error;
665
687
 
666
- err = js_create_external_arraybuffer(env, (void *) key->data, key->len, rocksdb_native__on_free, NULL, &result);
688
+ if (req->handle.error) {
689
+ err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
667
690
  assert(err == 0);
668
-
669
- err = js_set_element(env, keys, i, result);
691
+ } else {
692
+ err = js_get_null(env, &error);
670
693
  assert(err == 0);
671
694
 
672
- rocksdb_slice_t *value = &req->values[i];
695
+ for (size_t i = 0; i < len; i++) {
696
+ js_value_t *result;
673
697
 
674
- err = js_create_external_arraybuffer(env, (void *) value->data, value->len, rocksdb_native__on_free, NULL, &result);
675
- assert(err == 0);
698
+ rocksdb_slice_t *key = &req->keys[i];
676
699
 
677
- err = js_set_element(env, values, i, result);
678
- assert(err == 0);
700
+ err = js_create_external_arraybuffer(env, (void *) key->data, key->len, rocksdb_native__on_free, NULL, &result);
701
+ assert(err == 0);
702
+
703
+ err = js_set_element(env, keys, i, result);
704
+ assert(err == 0);
705
+
706
+ rocksdb_slice_t *value = &req->values[i];
707
+
708
+ err = js_create_external_arraybuffer(env, (void *) value->data, value->len, rocksdb_native__on_free, NULL, &result);
709
+ assert(err == 0);
710
+
711
+ err = js_set_element(env, values, i, result);
712
+ assert(err == 0);
713
+ }
679
714
  }
680
- }
681
715
 
682
- if (!db->exiting) {
683
716
  js_call_function_with_checkpoint(env, ctx, cb, 3, (js_value_t *[]) {error, keys, values}, NULL);
684
- }
685
717
 
686
- err = js_close_handle_scope(env, scope);
687
- assert(err == 0);
718
+ err = js_close_handle_scope(env, scope);
719
+ assert(err == 0);
720
+ }
688
721
  }
689
722
 
690
723
  static js_value_t *
@@ -780,62 +813,80 @@ rocksdb_native__on_read(rocksdb_read_batch_t *handle, int status) {
780
813
 
781
814
  js_env_t *env = req->env;
782
815
 
783
- js_handle_scope_t *scope;
784
- err = js_open_handle_scope(env, &scope);
785
- assert(err == 0);
786
-
787
816
  size_t len = req->handle.len;
788
817
 
789
- js_value_t *errors;
790
- err = js_create_array_with_length(env, len, &errors);
791
- assert(err == 0);
818
+ if (db->exiting) {
819
+ if (status == 0) {
820
+ for (size_t i = 0; i < len; i++) {
821
+ js_value_t *result;
792
822
 
793
- js_value_t *values;
794
- err = js_create_array_with_length(env, len, &values);
795
- assert(err == 0);
823
+ char *error = req->errors[i];
796
824
 
797
- for (size_t i = 0; i < len; i++) {
798
- js_value_t *result;
825
+ if (error) continue;
799
826
 
800
- char *error = req->errors[i];
827
+ rocksdb_slice_destroy(&req->reads[i].value);
828
+ }
829
+ }
801
830
 
802
- if (error) {
803
- err = js_create_string_utf8(env, (utf8_t *) error, -1, &result);
804
- assert(err == 0);
831
+ err = js_delete_reference(env, req->on_status);
832
+ assert(err == 0);
805
833
 
806
- err = js_set_element(env, errors, i, result);
807
- assert(err == 0);
808
- } else {
809
- rocksdb_slice_t *slice = &req->reads[i].value;
834
+ err = js_delete_reference(env, req->ctx);
835
+ assert(err == 0);
836
+ } else {
837
+ js_handle_scope_t *scope;
838
+ err = js_open_handle_scope(env, &scope);
839
+ assert(err == 0);
810
840
 
811
- err = js_create_external_arraybuffer(env, (void *) slice->data, slice->len, rocksdb_native__on_free, NULL, &result);
812
- assert(err == 0);
841
+ js_value_t *errors;
842
+ err = js_create_array_with_length(env, len, &errors);
843
+ assert(err == 0);
813
844
 
814
- err = js_set_element(env, values, i, result);
815
- assert(err == 0);
845
+ js_value_t *values;
846
+ err = js_create_array_with_length(env, len, &values);
847
+ assert(err == 0);
848
+
849
+ for (size_t i = 0; i < len; i++) {
850
+ js_value_t *result;
851
+
852
+ char *error = req->errors[i];
853
+
854
+ if (error) {
855
+ err = js_create_string_utf8(env, (utf8_t *) error, -1, &result);
856
+ assert(err == 0);
857
+
858
+ err = js_set_element(env, errors, i, result);
859
+ assert(err == 0);
860
+ } else {
861
+ rocksdb_slice_t *slice = &req->reads[i].value;
862
+
863
+ err = js_create_external_arraybuffer(env, (void *) slice->data, slice->len, rocksdb_native__on_free, NULL, &result);
864
+ assert(err == 0);
865
+
866
+ err = js_set_element(env, values, i, result);
867
+ assert(err == 0);
868
+ }
816
869
  }
817
- }
818
870
 
819
- js_value_t *ctx;
820
- err = js_get_reference_value(env, req->ctx, &ctx);
821
- assert(err == 0);
871
+ js_value_t *ctx;
872
+ err = js_get_reference_value(env, req->ctx, &ctx);
873
+ assert(err == 0);
822
874
 
823
- js_value_t *cb;
824
- err = js_get_reference_value(env, req->on_status, &cb);
825
- assert(err == 0);
875
+ js_value_t *cb;
876
+ err = js_get_reference_value(env, req->on_status, &cb);
877
+ assert(err == 0);
826
878
 
827
- err = js_delete_reference(env, req->on_status);
828
- assert(err == 0);
879
+ err = js_delete_reference(env, req->on_status);
880
+ assert(err == 0);
829
881
 
830
- err = js_delete_reference(env, req->ctx);
831
- assert(err == 0);
882
+ err = js_delete_reference(env, req->ctx);
883
+ assert(err == 0);
832
884
 
833
- if (!db->exiting) {
834
885
  js_call_function_with_checkpoint(env, ctx, cb, 2, (js_value_t *[]) {errors, values}, NULL);
835
- }
836
886
 
837
- err = js_close_handle_scope(env, scope);
838
- assert(err == 0);
887
+ err = js_close_handle_scope(env, scope);
888
+ assert(err == 0);
889
+ }
839
890
  }
840
891
 
841
892
  static js_value_t *
@@ -983,40 +1034,46 @@ rocksdb_native__on_write(rocksdb_write_batch_t *handle, int status) {
983
1034
 
984
1035
  js_env_t *env = req->env;
985
1036
 
986
- js_handle_scope_t *scope;
987
- err = js_open_handle_scope(env, &scope);
988
- assert(err == 0);
989
-
990
- js_value_t *error;
1037
+ if (db->exiting) {
1038
+ err = js_delete_reference(env, req->on_status);
1039
+ assert(err == 0);
991
1040
 
992
- if (req->handle.error) {
993
- err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
1041
+ err = js_delete_reference(env, req->ctx);
994
1042
  assert(err == 0);
995
1043
  } else {
996
- err = js_get_null(env, &error);
1044
+ js_handle_scope_t *scope;
1045
+ err = js_open_handle_scope(env, &scope);
997
1046
  assert(err == 0);
998
- }
999
1047
 
1000
- js_value_t *ctx;
1001
- err = js_get_reference_value(env, req->ctx, &ctx);
1002
- assert(err == 0);
1048
+ js_value_t *error;
1003
1049
 
1004
- js_value_t *cb;
1005
- err = js_get_reference_value(env, req->on_status, &cb);
1006
- assert(err == 0);
1050
+ if (req->handle.error) {
1051
+ err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
1052
+ assert(err == 0);
1053
+ } else {
1054
+ err = js_get_null(env, &error);
1055
+ assert(err == 0);
1056
+ }
1007
1057
 
1008
- err = js_delete_reference(env, req->on_status);
1009
- assert(err == 0);
1058
+ js_value_t *ctx;
1059
+ err = js_get_reference_value(env, req->ctx, &ctx);
1060
+ assert(err == 0);
1010
1061
 
1011
- err = js_delete_reference(env, req->ctx);
1012
- assert(err == 0);
1062
+ js_value_t *cb;
1063
+ err = js_get_reference_value(env, req->on_status, &cb);
1064
+ assert(err == 0);
1065
+
1066
+ err = js_delete_reference(env, req->on_status);
1067
+ assert(err == 0);
1068
+
1069
+ err = js_delete_reference(env, req->ctx);
1070
+ assert(err == 0);
1013
1071
 
1014
- if (!db->exiting) {
1015
1072
  js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
1016
- }
1017
1073
 
1018
- err = js_close_handle_scope(env, scope);
1019
- assert(err == 0);
1074
+ err = js_close_handle_scope(env, scope);
1075
+ assert(err == 0);
1076
+ }
1020
1077
  }
1021
1078
 
1022
1079
  static js_value_t *
package/lib/iterator.js CHANGED
@@ -99,12 +99,7 @@ module.exports = class RocksDBIterator extends Readable {
99
99
  }
100
100
 
101
101
  _init() {
102
- this._handle = binding.iteratorInit(
103
- this,
104
- this._onopen,
105
- this._onclose,
106
- this._onread
107
- )
102
+ this._handle = binding.iteratorInit()
108
103
  this._buffer = binding.iteratorBuffer(this._handle, this._capacity)
109
104
  }
110
105
 
@@ -121,7 +116,11 @@ module.exports = class RocksDBIterator extends Readable {
121
116
  this._lt,
122
117
  this._lte,
123
118
  this._reverse,
124
- this._snapshot ? this._snapshot._handle : null
119
+ this._snapshot ? this._snapshot._handle : null,
120
+ this,
121
+ this._onopen,
122
+ this._onclose,
123
+ this._onread
125
124
  )
126
125
  }
127
126
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rocksdb-native",
3
- "version": "2.6.6",
3
+ "version": "2.6.8",
4
4
  "description": "librocksdb bindings for JavaScript",
5
5
  "exports": {
6
6
  ".": "./index.js",