If you're sure that there's no other threads or processes accessing
the database then I'd suggest you to look for help somewhere among
Windows gurus because it sounds like an issue with file system which
somehow tries to execute some tasks in background returning to the
caller immediately. Maybe it's some antivirus that causes this...

Probably I saw somewhat similar problems not in SQLite but in general
file manager: when I delete some directory recursively manager deletes
first all files inside it and then deletes the directory itself. But
sometimes it reports an error that directory cannot be deleted because
it's not empty. Retrying in a second or so deletes directory
successfully suggesting that file system (or our corporate antivirus
maybe) has some bad races in this field...


Pavel

On Tue, Feb 23, 2010 at 1:20 PM, Alan Thomas <alan.tho...@attglobal.net> wrote:
> The application runs as a singleton; there are no other applications
> accessing the data base.
>
> I do not run the command-line tool while testing.
>
> I've cut down the example code:
>
>  SqlStatus = sqlite3_open16 ( db_loc_string
>                             , &SqlDB
>                             ) ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>    . . .
>    return DATASTORE_UNAVAILABLE ;
>  }
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>                                   , L"BEGIN TRANSACTION"
>                                   , 36
>                                   , &SqlStmt
>                                   , NULL
>                                   ) ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>    . . .
>    return SQL_PREP_ERROR ;
>  }
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>  if ( SQLITE_DONE != SqlStatus )
>  {
>    . . .
>    return TXN_BEGIN_FAILED ;
>  }
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>    . . .
>    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 )
>  {
>    . . .
>    return SQL_PREP_ERROR ;
>  }
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>  if ( SQLITE_DONE != SqlStatus )
>  {
>    . . .
>    return SQL_DLET_ERROR ;
>  }
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>    . . .
>    return SQL_FNLZ_ERROR ;
>  }
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>                                   , L"COMMIT TRANSACTION"
>                                   , 38
>                                   , &SqlStmt
>                                   , NULL
>                                   ) ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>    . . .
>    return SQL_PREP_ERROR ;
>  }
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>  if ( SQLITE_DONE != SqlStatus )
>  {
>    . . .
>    return TXN_COMMIT_FAILED ;
>  }
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>    . . .
>    return SQL_FNLZ_ERROR ;
>  }
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>                                   , L"BEGIN TRANSACTION"
>                                   , 36
>                                   , &SqlStmt
>                                   , NULL
>                                   ) ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>    . . .
>    return SQL_PREP_ERROR ;
>  }
>
>  /*-------------------------*/
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>  if ( SQLITE_DONE != SqlStatus )
>  {
>    . . .
>    return TXN_BEGIN_FAILED ;
>  }
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>    . . .
>    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" , RESPONSE_TEXT"
>                  L" )"
>           L" VALUES ( '%s'"
>                     . , ,
>                  L" , '%s'"
>                  L" )"
>                     , ServerName
>                     . . .
>                     , &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 )
>  {
>   . . .
>   return SQL_ISRT_ERROR ;
>  }
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>   . . .
>   return XID_DBPA_SQL_FNLZ_ERROR ;
>  }
>
>  . . .
>
>  SqlStatus = sqlite3_prepare16_v2 ( SqlDB
>                                  , L"COMMIT TRANSACTION"
>                                  , 38
>                                  , &SqlStmt
>                                  , NULL
>                                  ) ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>   . . .
>   return XID_DBPA_SQL_PREP_ERROR ;
>  }
>
>  SqlStatus = sqlite3_step ( SqlStmt ) ;
>  if ( SQLITE_DONE != SqlStatus )
>  {
>   . . .
>   return XID_DBPA_TXN_COMMIT_FAILED ;
>  }
>
>  SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
>  if ( SQLITE_OK != SqlStatus )
>  {
>   . . .
>   return XID_DBPA_SQL_FNLZ_ERROR ;
>  }
>
>  sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
>
> The SQLITE_BUSY condition is raised on approximately the 300th execution of
> the second COMMIT TRANSACTION.
>
>
> _______________________________________________
> 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