in src/database.cc [88:116]
void Database::Schedule(Work_Callback callback, Baton* baton, bool exclusive) {
Napi::Env env = this->Env();
Napi::HandleScope scope(env);
if (!open && locked) {
EXCEPTION(Napi::String::New(env, "Database is closed"), SQLITE_MISUSE, exception);
Napi::Function cb = baton->callback.Value();
// We don't call the actual callback, so we have to make sure that
// the baton gets destroyed.
delete baton;
if (!cb.IsUndefined() && cb.IsFunction()) {
Napi::Value argv[] = { exception };
TRY_CATCH_CALL(Value(), cb, 1, argv);
}
else {
Napi::Value argv[] = { Napi::String::New(env, "error"), exception };
EMIT_EVENT(Value(), 2, argv);
}
return;
}
if (!open || ((locked || exclusive || serialize) && pending > 0)) {
queue.push(new Call(callback, baton, exclusive || serialize));
}
else {
locked = exclusive;
callback(baton);
}
}