leveldown: Segfault on close with pending put

I am getting a segfault when I run the following unit test. The segfault doesn’t happen every time I run the test. Any ideas?

var test        = require('tape');
var level       = require('level');
var path        = require('path');
var through2    = require('through2');
var JSONStream  = require('JSONStream');

function push(db) {

    return through2.obj(function(levelRequest, enc, cb) {

        var self = this;

        db.put(levelRequest.key, levelRequest.value, {sync:true}, function(error) {
            if (error) {
                console.log('encountered an error while putting ' + JSON.stringify(levelRequest) + ' on the database: '
                            + error);
                self.push({result:'error', key: levelRequest.key, msg: error});
            } else {
                self.push({result:'success', key: levelRequest.key});
            }
            cb();
        });

    })

}

test('can push values through a level database', function(t) {
    var db   = level('./test.db');

    var dbify = push(db);
    var stringify = JSONStream.stringify(false);

    dbify.pipe(stringify).pipe(process.stdout);

    dbify.write({key:'hi', value:"wisconsin"});

    db.close(function(er) {
        if (er) throw er;
        t.end();
    })

})

About this issue

  • Original URL
  • State: closed
  • Created 9 years ago
  • Comments: 53 (42 by maintainers)

Most upvoted comments

The concept is put it(a task) into another process/thread/coroutine(fiber) to run.