In my sample that I supplied I illustrated how two threads does the
following:
Lock (Global Critical Section)
Queryobject.Prepare (Sqlite3_prepare)
QueryObject.Step (Sqlite3_step)
QueryObject.Reset (Sqlite3_reset)
Unlock
QueryObject.Free; (Sqlite3_reset (the missing piece of the puzzle))
In the above example the call to these 3 functions are locked in a
global critical section, so none of them can be executed at the same
time,
however:
The last line of code I did not see I had an object that was destroyed
that called sqlite3_reset. This is where the problem lied, the
destructor of the object did something as follows:
Destructor
If FHandle <> nil then begin
Sqlite3_reset;
Sqlite3_finalize;
FHandle := nil;
end
I understand that the call to sqlite3_reset is a bit pointless in the
destructor here as Sqlite3_finalize takes care of all that, but it is
just interesting to note that by the removal of sqlite3_reset OR by
locking the call to sqlite3_reset it seemed to work, however locking the
call to sqlite3_finalize did not seem to be necessary and did not
produce the SQLITE_MISUSE error.
Hope that is more clear.
-----Original Message-----
I'm not sure I completely understand, but anyway... :)
-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------