In our application we have two threads implementing a signal logger functionality, see pseudo code below. Thread 1: Reads signal data, and log to a global in-memory SQLite database after a pre-determined number of reads.
1 while( true ) 2 { 3 // Buffer data, blocks until new data is available 4 buffer.append( readData() ) 5 ++numberOfReads; 6 7 if ( numberOfReads == maxReads ) 8 { 9 globalTransactionMutex.request() 10 11 begin transaction 12 insert bufferered data to "main" in GlobalDbConnection 13 commit transaction 14 15 globalTransactionMutex.release() 16 numberOfReads = 0; 17 } 18 } Thread 2: Upon user action, transfer data within a specified time window from the in-memory database to a database file 19 while( true ) 20 { 21 waitForUserAction() 22 23 DestDbConnection = Create destination database file Dest.db 24 close DestDbConnection 25 26 attach Dest.db with GlobalDbConnection as "Dest" 27 transfer log data from "main" to "Dest" in GlobalDbConnection using INSERT INTO Dest SELECT FROM main 28 29 globalTransactionMutex.request() 30 detach "Dest" from GlobalDbConnection 31 globalTransactionMutex.release() 32 } Attaching the destination database Dest.db and transferring data (23)-(27) work without any hassle. The problem we're facing is that the detach statement (30) fails with error message "SQL Logic error or missing database". The transaction is protected with a mutex, so it should not be possible to execute the detach statement (30) during an ongoing transaction. Moreover, both threads have the same priority, so we don't have any dead-lock issues. The code in Thread 2 (19) -(32) seems to work fine in a single threaded unit test. We're using SQLite v. 3.6.21 on Windows XP. Does anyone have any idea about the source of this problem? Have we missed something regarding SQLite and multi-threading? Regards, Pontus Bergsten _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users