> All of the archive content on SQLITE_BUSY appears to assume multi-threaded
> database access; I have only a primary thread.

There's also multi-process access. Is there any chance that there're
several instances of your application running at the same time? What
is your test case exactly? Is it your application doing a cycle 300
times and hitting an error eventually? Do you try to access the same
database with some tool to see what is stored inside it at the moment?


Pavel

On Fri, Feb 19, 2010 at 11:53 AM, Alan Thomas <alan.tho...@attglobal.net> wrote:
> I'm currently working with version 3.6.14 on Windows XP/SP4 (32-bit).  The
> application is coded for Unicode.
>
> I wrote all of the application (MS C++ native code) excluding SQLite, so I'm
> confident that it is a single-threaded app.  Threads have never been part of
> its design.
>
> The failure occurs in a common service routine called perhaps 300 times
> before this error is reported.
>
> The failure occurs every time I run the program and always occurs in the
> same place.
>
> While executing the following set BEGIN/DELETE/COMMIT/BEGIN/INSERT/COMMIT
> commands approximately once per second, SQLite is returning 0x05 (BUSY) on
> the first COMMIT in the second iteration of the loop.  A journal file does
> exist when the BUSY condition is returned.
>
> Because this is a single-threaded app, waiting for the lock to clear doesn't
> work.
>
> In the following source code, "SQLiteError ( )" is a common services routine
> that provides a message box and logging in the event of an error.
>
> Source code:
>
>  SqlDB   = NULL ;
>
>  SqlStmt = NULL ;
>
>  SqlStatus = sqlite3_open16 ( db_loc_string
>
>                             , &SqlDB
>
>                             ) ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( NULL
>
>                , L"sqlite3_open16 ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return DATASTORE_UNAVAILABLE ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_open16 ( SqlDB
>
>                                   , L"BEGIN TRANSACTION"
>
>                                   , 36
>
>                                   , &SqlStmt
>
>                                   , NULL
>
>                                   ) ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"BEGIN TRANSACTION 1"
>
>                , L"sqlite3_prepare16_V2 ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_PREP_ERROR ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>
>                                   , L"BEGIN TRANSACTION"
>
>                                   , 36
>
>                                   , &SqlStmt
>
>                                   , NULL
>
>                                   ) ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"BEGIN TRANSACTION 1"
>
>                , L"sqlite3_prepare16_V2 ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_PREP_ERROR ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>
>  if ( SQLITE_DONE != SqlStatus )
>
>  {
>
>    SQLiteError ( L"BEGIN TRANSACTION 1"
>
>                , L"sqlite3_step ( )"
>
>                ) ;
>
>    sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>    sqlite3_close    ( SqlDB   ) ; SqlDB   = NULL ;
>
>    return TXN_BEGIN_FAILED ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"BEGIN TRANSACTION 1"
>
>                , L"sqlite3_finalize ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_FNLZ_ERROR ;
>
>  }
>
>
>
>
>
>  swprintf_s ( (PXID_CHAR)sql_statement
>
>             , sizeof ( sql_statement ) / sizeof ( XID_CHAR )
>
>             ,   L"DELETE"
>
>                  L" FROM RSPNS"
>
>                 L" WHERE . . .
>
>             ) ;
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>
>                                   , sql_statement
>
>                                   , ( lstrlen ( sql_statement ) + 1 ) *
> sizeof ( XID_CHAR )
>
>                                   , &SqlStmt
>
>                                   , NULL
>
>                                   ) ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( sql_statement
>
>                , L"sqlite3_prepare16_v2 ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_PREP_ERROR ;  //  IMPLICIT DATA BASE ROLLBACK
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>
>  if ( SQLITE_DONE != SqlStatus )
>
>  {
>
>    SQLiteError ( sql_statement
>
>                , L"sqlite3_step ( )"
>
>                ) ;
>
>    sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>    sqlite3_close    ( SqlDB   ) ; SqlDB   = NULL ;
>
>    return SQL_DLET_ERROR ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( sql_statement
>
>                , L"sqlite3_finalize ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_FNLZ_ERROR ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>
>                                   , L"COMMIT TRANSACTION"
>
>                                   , 38
>
>                                   , &SqlStmt
>
>                                   , NULL
>
>                                   ) ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"COMMIT TRANSACTION 1"
>
>                , L"sqlite3_prepare16_V2 ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_PREP_ERROR ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>
>  if ( SQLITE_DONE != SqlStatus )
>
>  {
>
>    SQLiteError ( L"COMMIT TRANSACTION 1"
>
>                , L"sqlite3_step ( )"
>
>                ) ;
>
>    sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>    sqlite3_close    ( SqlDB   ) ; SqlDB   = NULL ;
>
>    return TXN_COMMIT_FAILED ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"COMMIT TRANSACTION 1"
>
>                , L"sqlite3_finalize ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_FNLZ_ERROR ;
>
>  }
>
>
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>
>                                   , L"BEGIN TRANSACTION"
>
>                                   , 36
>
>                                   , &SqlStmt
>
>                                   , NULL
>
>                                   ) ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"XID_DBPA_TACL6530::SaveResponse ( )"
>
>                , L"BEGIN TRANSACTION 2"
>
>                , L"sqlite3_prepare16_V2 ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_PREP_ERROR ;
>
>  }
>
>
>
>  /*-------------------------*/
>
>
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>
>  if ( SQLITE_DONE != SqlStatus )
>
>  {
>
>    SQLiteError ( L"BEGIN TRANSACTION 2"
>
>                , L"sqlite3_step ( )"
>
>                ) ;
>
>    sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>    sqlite3_close    ( SqlDB   ) ; SqlDB   = NULL ;
>
>    return TXN_BEGIN_FAILED ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"BEGIN TRANSACTION 2"
>
>                , L"sqlite3_finalize ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return SQL_FNLZ_ERROR ;
>
>  }
>
>
>
>
>
>  . . .
>
>
>
>                 swprintf_s ( (PXID_CHAR)sql_statement
>
>                            , sizeof ( sql_statement ) / sizeof ( XID_CHAR )
>
>                            ,   L"INSERT"
>
>                                 L" INTO RSPNS"
>
>                                    L" ( SERVER_NAME"
>
>                                    L" , DBMS_ID"
>
>                                    L" , REQUEST_TYPE"
>
>                                    L" , REQUEST_DATE"
>
>                                    L" , REQUEST_TIME"
>
>                                    L" , RESPONSE_LINE"
>
>                                    L" , RESPONSE_TEXT"
>
>                                    L" )"
>
>                             L" VALUES ( '%s'"
>
>                                    L" , %hu"
>
>                                    L" , %lu"
>
>                                    L" , '%s'"
>
>                                    L" , '%s'"
>
>                                    L" , %lu"
>
>                                    L" , '%s'"
>
>                                    L" )"
>
>                           , ServerName
>
>                           , DbmsId
>
>                           , CommandType
>
>                           , date_string
>
>                           , time_string
>
>                           , line_counter
>
>                           , &InputBuffer[m]
>
>                           ) ;
>
>
>
>
>
>                 SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>
>                                                  , (const char
> *)sql_statement
>
>                                                  , ( lstrlen (
> sql_statement ) + 1 ) * sizeof ( XID_CHAR )
>
>                                                  , &SqlStmt
>
>                                                  , NULL
>
>                                                  ) ;
>
>                 if ( SQLITE_OK != SqlStatus )
>
>                 {
>
>                   SQLiteError ( sql_statement
>
>                               , L"sqlite3_prepare16_v2 ( )"
>
>                               ) ;
>
>                   sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>                   return SQL_PREP_ERROR ;
>
>                 }
>
>
>
>
>
>                 SqlStatus = sqlite3_step ( SqlStmt ) ;
>
>                 if ( SQLITE_DONE != SqlStatus )
>
>                 {
>
>                   SQLiteError ( sql_statement
>
>                               , L"sqlite3_step ( )"
>
>                               ) ;
>
>                   sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>                   sqlite3_close    ( SqlDB   ) ; SqlDB   = NULL ;
>
>                   return SQL_ISRT_ERROR ;
>
>                 }
>
>
>
>
>
>                 SqlStatus = sqlite3_finalize ( SqlStmt ) ;
>
>                 if ( SQLITE_OK != SqlStatus )
>
>                 {
>
>                   SQLiteError ( sql_statement
>
>                               , L"sqlite3_finalize ( )"
>
>                               ) ;
>
>                   sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>                   return XID_DBPA_SQL_FNLZ_ERROR ;
>
>                 }
>
>
>
>  . . .
>
>
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>
>                                   , L"COMMIT TRANSACTION"
>
>                                   , 38
>
>                                   , &SqlStmt
>
>                                   , NULL
>
>                                   ) ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"XID_DBPA_TACL6530::SaveResponse ( )"
>
>                , L"COMMIT TRANSACTION 2"
>
>                , L"sqlite3_prepare16_V2 ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return XID_DBPA_SQL_PREP_ERROR ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>
>  if ( SQLITE_DONE != SqlStatus )
>
>  {
>
>    SQLiteError ( L"XID_DBPA_TACL6530::SaveResponse ( )"
>
>                , L"COMMIT TRANSACTION 2"
>
>                , L"sqlite3_step ( )"
>
>                ) ;
>
>    sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>    sqlite3_close    ( SqlDB   ) ; SqlDB   = NULL ;
>
>    return XID_DBPA_TXN_COMMIT_FAILED ;
>
>  }
>
>
>
>
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>
>  if ( SQLITE_OK != SqlStatus )
>
>  {
>
>    SQLiteError ( L"XID_DBPA_TACL6530::SaveResponse ( )"
>
>                , L"COMMIT TRANSACTION 2"
>
>                , L"sqlite3_finalize ( )"
>
>                ) ;
>
>    sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
>    return XID_DBPA_SQL_FNLZ_ERROR ;
>
>  }
>
>
>
>  sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
> The aforementioned message box and log tell me that the failure is detected
> in the first COMMIT TRANSACTION on sqlite3_step ( ).
>
> All of the archive content on SQLITE_BUSY appears to assume multi-threaded
> database access; I have only a primary thread.
>
> -   - Alan T.
>
>
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to