Hi all, while doing a stress test on my embedded server application I'm noting a crash in sqlite3_finalize that I don't understand, and I'm wondering if I'm doing the right error handling.
Background: In order to encapsulate writings to the tables I'm using BEGIN EXCLUSIVE TRANSACTION to block all other threads from reading and writing. Of course this requires a timeout and busy handling when trying to acquire the exclusive lock. So the code looks like: --------------------------------------- /** Obtain exclusive lock **/ n = 0; do { rc = sqlite3_prepare_v2(db, "BEGIN EXCLUSIVE TRANSACTION;", -1, &stmt, 0); if( (rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED) ) { n++; Sleep(SQLTM_TIME); } }while( (n < SQLTM_COUNT) && ((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED))); if( n == SQLTM_COUNT ) return(TIMEOUT_ERROR); /** --> Timeout during prepare, never happends so far **/ n = 0; do { rc = sqlite3_step(stmt); if( (rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED) ) { Sleep(SQLTM_TIME); n++; } }while( (n < SQLTM_COUNT) && ((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED))); /** we are done **/ sqlite3_finalize(stmt); /** <<- crash if timeout occurs **/ if( n == SQLTM_COUNT ) return(TIMEOUT_ERROR); ------------------------ The problem is that it crashes in the sqlite3_finalize function in case the sqlite3_step doesn't actually did something and the timeout condition becames true. My feeling is that it occurs only when trying to get the exclusive transaction; A simple "SELECT *" that runs into a timeout doesn't crash when using sqlite3_finalize. Before starting to deeper debugging this, I would like to ask if there is an advice or known issue concerning the sqlite3_finalize when a step was not successful due to busy or locking state. It is not allowed to call this function in this case ? But then: How to free the statement, succesfully created by sqlite3_prepare_v2 ? I'm using sqlite 3.6.6.2, compiled using MSVS 2008, and of course threadsafe. I'm not using any timeout callback or timeout value settings since I'm handling this by my selve like in the code above. Thank you in advance. Marcus _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users