mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
More aggressive retry schedule in sqlite_busy_timeout(). (CVS 1181)
FossilOrigin-Name: 5e85025be7aa4a03b0cfb4d0f28a2e44653b9d3f
This commit is contained in:
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
||||
C Allow\s"<expr>\sIN\s<table>"\sas\sa\sshorthand\sfor\n"<expr>\sIN\s(SELECT\s*\sFROM\s<table>)"\s(CVS\s1180)
|
||||
D 2004-01-15T03:30:25
|
||||
C More\saggressive\sretry\sschedule\sin\ssqlite_busy_timeout().\s(CVS\s1181)
|
||||
D 2004-01-15T13:29:32
|
||||
F Makefile.in 0515ff9218ad8d5a8f6220f0494b8ef94c67013b
|
||||
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
|
||||
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
|
||||
@ -36,7 +36,7 @@ F src/func.c 62cf8fae8147c0301d1c6a4a94fe0a78f7aa5b33
|
||||
F src/hash.c 9b56ef3b291e25168f630d5643a4264ec011c70e
|
||||
F src/hash.h 3247573ab95b9dd90bcca0307a75d9a16da1ccc7
|
||||
F src/insert.c 01f66866f35c986eab4a57373ca689a3255ef2df
|
||||
F src/main.c 67af644fa7c1b8bb06032b6a9459d084cf79bb81
|
||||
F src/main.c 808ea1bda0798f4a714479aee8289d65f04cf29b
|
||||
F src/md5.c fe4f9c9c6f71dfc26af8da63e4d04489b1430565
|
||||
F src/os.c 681ec36217bc7c795d55d9a63ff79a8614ddee8c
|
||||
F src/os.h 257c9aef1567bb20c8b767fc27fe3ee7d89104e0
|
||||
@ -97,7 +97,7 @@ F test/intpkey.test 9320af48415c594afd4e15f8ef0daa272e05502e
|
||||
F test/ioerr.test 5dbaf09f96b56ee01cf3edd762b96eb4ad2c9ca4
|
||||
F test/join.test 9ef6aabaac9de51d5fc41e68d1f4355da05a84cd
|
||||
F test/limit.test fa2a8b3fe377ebe60e0bc9a6a35af9ac4eb3d2b3
|
||||
F test/lock.test 388a3a10962d2d571c0c1821cc35bf069ee73473
|
||||
F test/lock.test 3d1855ba930732566f569d680e828656bd5b7f5c
|
||||
F test/main.test 6a851b5992c4881a725a3d9647e629199df8de9d
|
||||
F test/malloc.test 7ba32a9ebd3aeed52ae4aaa6d42ca37e444536fd
|
||||
F test/memdb.test 6ece25c7c0e6500199d3662607a3edca081abb2a
|
||||
@ -180,7 +180,7 @@ F www/speed.tcl 2f6b1155b99d39adb185f900456d1d592c4832b3
|
||||
F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
|
||||
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
|
||||
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
|
||||
P 72bc84f2f18f6eeb279a4ad670310e85d154f663
|
||||
R 2bc9ea54c7ac36ba81835b3e442ee3bc
|
||||
P 01874d252ac44861e927dea3f5534f67e19b1fa8
|
||||
R 889c699198a4172a6f24b672e8a9f759
|
||||
U drh
|
||||
Z 123afbc81ac483920b37bfd6b69d6479
|
||||
Z 4f8f302ff0837a7468fa75430d63c5d0
|
||||
|
@ -1 +1 @@
|
||||
01874d252ac44861e927dea3f5534f67e19b1fa8
|
||||
5e85025be7aa4a03b0cfb4d0f28a2e44653b9d3f
|
29
src/main.c
29
src/main.c
@ -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.145 2004/01/15 02:44:03 drh Exp $
|
||||
** $Id: main.c,v 1.146 2004/01/15 13:29:32 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include "os.h"
|
||||
@ -784,22 +784,23 @@ static int sqliteDefaultBusyCallback(
|
||||
int count /* Number of times table has been busy */
|
||||
){
|
||||
#if SQLITE_MIN_SLEEP_MS==1
|
||||
int delay = 10;
|
||||
int prior_delay = 0;
|
||||
static const char delays[] =
|
||||
{ 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 50, 100};
|
||||
static const short int totals[] =
|
||||
{ 0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228, 287};
|
||||
# define NDELAY (sizeof(delays)/sizeof(delays[0]))
|
||||
int timeout = (int)Timeout;
|
||||
int i;
|
||||
int delay, prior;
|
||||
|
||||
for(i=1; i<count; i++){
|
||||
prior_delay += delay;
|
||||
delay = delay*2;
|
||||
if( delay>=1000 ){
|
||||
delay = 1000;
|
||||
prior_delay += 1000*(count - i - 1);
|
||||
break;
|
||||
}
|
||||
if( count <= NDELAY ){
|
||||
delay = delays[count-1];
|
||||
prior = totals[count-1];
|
||||
}else{
|
||||
delay = delays[NDELAY-1];
|
||||
prior = totals[NDELAY-1] + delay*(count-NDELAY-1);
|
||||
}
|
||||
if( prior_delay + delay > timeout ){
|
||||
delay = timeout - prior_delay;
|
||||
if( prior + delay > timeout ){
|
||||
delay = timeout - prior;
|
||||
if( delay<=0 ) return 0;
|
||||
}
|
||||
sqliteOsSleep(delay);
|
||||
|
@ -11,7 +11,7 @@
|
||||
# This file implements regression tests for SQLite library. The
|
||||
# focus of this script is database locks.
|
||||
#
|
||||
# $Id: lock.test,v 1.18 2002/09/14 13:47:33 drh Exp $
|
||||
# $Id: lock.test,v 1.19 2004/01/15 13:29:40 drh Exp $
|
||||
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
@ -232,7 +232,19 @@ do_test lock-2.7 {
|
||||
lappend r $msg
|
||||
lappend r $::callback_value
|
||||
} {0 {} {1 2 3}}
|
||||
integrity_check lock-2.8
|
||||
|
||||
# Test the built-in busy timeout handler
|
||||
#
|
||||
do_test lock-2.8 {
|
||||
db2 timeout 400
|
||||
execsql BEGIN
|
||||
catchsql BEGIN db2
|
||||
} {1 {database is locked}}
|
||||
do_test lock-2.9 {
|
||||
db2 timeout 0
|
||||
execsql COMMIT
|
||||
} {}
|
||||
integrity_check lock-2.10
|
||||
|
||||
# Try to start two transactions in a row
|
||||
#
|
||||
|
Reference in New Issue
Block a user