Added extra check for closed database in update_hook

This commit is contained in:
Maas-Maarten Zeeman
2022-01-03 23:33:37 +01:00
parent 40456147da
commit 49aff0cf9a
2 changed files with 100 additions and 95 deletions

View File

@@ -309,14 +309,19 @@ update_callback(void *arg, int sqlite_operation_type, char const *sqlite_databas
}
static ERL_NIF_TERM
do_set_update_hook(ErlNifEnv *env, esqlite_connection *db, const ERL_NIF_TERM arg)
do_set_update_hook(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
{
if(!enif_get_local_pid(env, arg, &db->notification_pid))
return make_error_tuple(env, "invalid_pid");
int rc;
sqlite3_update_hook(db->db, NULL, NULL);
if(sqlite3_update_hook(db->db, update_callback, db) != SQLITE_OK)
return make_error_tuple(env, "sqlite3_update_hook_fail");
if(!enif_get_local_pid(env, arg, &conn->notification_pid)) {
return make_error_tuple(env, "invalid_pid");
}
if(!conn->db) {
return make_error_tuple(env, "closed");
}
sqlite3_update_hook(conn->db, update_callback, conn);
return make_atom(env, "ok");
}

View File

@@ -447,7 +447,7 @@ step(#statement{raw_statement=RawStatement, raw_connection=RawConnection}, Timeo
{rows, list(tuple())} |
{'$busy', list(tuple())} |
{'$done', list(tuple())} |
{error, term()}.
{error, _}.
multi_step(#statement{raw_statement=RawStatement, raw_connection=RawConnection}, ChunkSize, Timeout) ->
Ref = make_ref(),
ok = esqlite3_nif:multi_step(RawConnection, RawStatement, ChunkSize, Ref, self()),