1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

Make sure there is only one busy counter. Ticket #1315. (CVS 2543)

FossilOrigin-Name: af2a0ba4a38abf208db1ff6f018cf756de2afd5b
This commit is contained in:
drh
2005-07-09 02:16:02 +00:00
parent 57dbd7b324
commit a4afb65cb7
8 changed files with 86 additions and 28 deletions

View File

@@ -14,7 +14,7 @@
** other files are for internal use by SQLite and should not be
** accessed by users of the library.
**
** $Id: main.c,v 1.294 2005/06/14 02:24:32 drh Exp $
** $Id: main.c,v 1.295 2005/07/09 02:16:03 drh Exp $
*/
#include "sqliteInt.h"
#include "os.h"
@@ -307,6 +307,25 @@ static int sqliteDefaultBusyCallback(
#endif
}
/*
** Invoke the given busy handler.
**
** This routine is called when an operation failed with a lock.
** If this routine returns non-zero, the lock is retried. If it
** returns 0, the operation aborts with an SQLITE_BUSY error.
*/
int sqlite3InvokeBusyHandler(BusyHandler *p){
int rc;
if( p==0 || p->xFunc==0 || p->nBusy<0 ) return 0;
rc = p->xFunc(p->pArg, p->nBusy);
if( rc==0 ){
p->nBusy = -1;
}else{
p->nBusy++;
}
return rc;
}
/*
** This routine sets the busy callback for an Sqlite database to the
** given callback function with the given argument.
@@ -321,6 +340,7 @@ int sqlite3_busy_handler(
}
db->busyHandler.xFunc = xBusy;
db->busyHandler.pArg = pArg;
db->busyHandler.nBusy = 0;
return SQLITE_OK;
}