in src/database.cc [42:86]
void Database::Process() {
Napi::Env env = this->Env();
Napi::HandleScope scope(env);
if (!open && locked && !queue.empty()) {
EXCEPTION(Napi::String::New(env, "Database handle is closed"), SQLITE_MISUSE, exception);
Napi::Value argv[] = { exception };
bool called = false;
// Call all callbacks with the error object.
while (!queue.empty()) {
std::unique_ptr<Call> call(queue.front());
queue.pop();
std::unique_ptr<Baton> baton(call->baton);
Napi::Function cb = baton->callback.Value();
if (!cb.IsUndefined() && cb.IsFunction()) {
TRY_CATCH_CALL(this->Value(), cb, 1, argv);
called = true;
}
}
// When we couldn't call a callback function, emit an error on the
// Database object.
if (!called) {
Napi::Value info[] = { Napi::String::New(env, "error"), exception };
EMIT_EVENT(Value(), 2, info);
}
return;
}
while (open && (!locked || pending == 0) && !queue.empty()) {
Call *c = queue.front();
if (c->exclusive && pending > 0) {
break;
}
queue.pop();
std::unique_ptr<Call> call(c);
locked = call->exclusive;
call->callback(call->baton);
if (locked) break;
}
}