From 16ddd2cd03c01dca59a93996fd77c4440e937ec5 Mon Sep 17 00:00:00 2001 From: Alexey Romanov Date: Fri, 17 Oct 2014 23:04:30 +0400 Subject: [PATCH] Ignore non-negative driver_async return values --- c_src/sqlite3_drv.c | 13 ++++++++----- c_src/sqlite3_drv.h | 1 - 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/c_src/sqlite3_drv.c b/c_src/sqlite3_drv.c index 46bb195..dbe442a 100644 --- a/c_src/sqlite3_drv.c +++ b/c_src/sqlite3_drv.c @@ -218,7 +218,6 @@ static ErlDrvData start(ErlDrvPort port, char* cmd) { drv->db = db; drv->db_name = db_name_copy; drv->key = sql_async_key(db_name_copy, port); - drv->async_handle = 0; drv->prepared_stmts = NULL; drv->prepared_count = 0; drv->prepared_alloc = 0; @@ -423,8 +422,14 @@ static inline async_sqlite3_command *make_async_command_script( static inline void exec_async_command( sqlite3_drv_t *drv, void (*async_invoke)(void*), async_sqlite3_command *async_command) { - drv->async_handle = driver_async(drv->port, &drv->key, async_invoke, - async_command, sql_free_async); + long status = driver_async(drv->port, &drv->key, async_invoke, + async_command, sql_free_async); + + // see https://groups.google.com/d/msg/erlang-programming/XiFR6xxhGos/B6ARBIlvpMUJ + if (status < 0) { + LOG_ERROR("driver_async call failed", 0); + output_error(drv, SQLITE_ERROR, "driver_async call failed"); + } } static inline int sql_exec_statement( @@ -713,8 +718,6 @@ static void sql_free_async(void *_async_command) { (async_sqlite3_command *) _async_command; driver_free(async_command->dataset); - async_command->driver_data->async_handle = 0; - free_ptr_list(async_command->ptrs, &driver_free_fun); free_ptr_list(async_command->binaries, &driver_free_binary_fun); diff --git a/c_src/sqlite3_drv.h b/c_src/sqlite3_drv.h index a8b0af9..bdf422b 100644 --- a/c_src/sqlite3_drv.h +++ b/c_src/sqlite3_drv.h @@ -61,7 +61,6 @@ typedef struct sqlite3_drv_t { unsigned int key; struct sqlite3 *db; char* db_name; - long async_handle; FILE *log; sqlite3_stmt **prepared_stmts; unsigned int prepared_count;