mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Fix a problem where a file was not being closed after a malloc() failure. (CVS 1741)
FossilOrigin-Name: 3c8512bc549e10ee131cb7f2d4e74d96e9de74a0
This commit is contained in:
18
manifest
18
manifest
@ -1,5 +1,5 @@
|
||||
C Add\snews\sabout\sthe\sbreak-in\sto\sthe\shomepage.\s(CVS\s1740)
|
||||
D 2004-06-26T12:40:07
|
||||
C Fix\sa\sproblem\swhere\sa\sfile\swas\snot\sbeing\sclosed\safter\sa\smalloc()\sfailure.\s(CVS\s1741)
|
||||
D 2004-06-26T13:51:34
|
||||
F Makefile.in cb7a9889c38723f72b2506c4236ff30a05ff172b
|
||||
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
|
||||
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
|
||||
@ -50,7 +50,7 @@ F src/os_unix.c bd62e20d3abfb96c41fe737715b328d1dbb52bf7
|
||||
F src/os_unix.h 00c1f82b526ab2fb7ee5ddd555ea4ed68363c93a
|
||||
F src/os_win.c 84549f6cc815237533c5d0eb3697352b03478d96
|
||||
F src/os_win.h babd4e912967c6b09088cfe38a45e8005a07ba44
|
||||
F src/pager.c d9f34d9245d4aa0b2073564e3f1d8a0d89f8fedd
|
||||
F src/pager.c 6240557abedaf6d888359a2365df45bce414c540
|
||||
F src/pager.h fe818866f6d1adcffeed88705e8df7e588cbaf13
|
||||
F src/parse.y e19e066e726a31d7b2d3e6475bdf55f7e339f8a3
|
||||
F src/pragma.c 16713c1bc440ccd9982a27fb4b38e1a1c95ffd29
|
||||
@ -77,7 +77,7 @@ F src/vdbe.c 423b55e65501ef2b60d8dedabe8d76d06ea62d99
|
||||
F src/vdbe.h 2d87155e31e84bb00cdc48cc1ce6987a3a484250
|
||||
F src/vdbeInt.h 22ab717b69074fe7a28f64e35a39bd436ad9d150
|
||||
F src/vdbeapi.c d3659f3f2982e79c06ab8e338604a39e0ea0d2d3
|
||||
F src/vdbeaux.c 51f23399819e4c3bcbddf662a90c34465b24392b
|
||||
F src/vdbeaux.c e7201e3f129439bc64d2ff79b54001adc2c95539
|
||||
F src/vdbemem.c d37e4033f7350e542f715c061bffe23feb51bc9e
|
||||
F src/where.c 6507074d8ce3f78e7a4cd33f667f11e62020553e
|
||||
F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
|
||||
@ -129,7 +129,7 @@ F test/laststmtchanges.test 417aa27eb2b5cdfafb46e390e2c9ddd0a20eba43
|
||||
F test/limit.test 60d7f856ee7846f7130dee67f10f0e726cd70b5d
|
||||
F test/lock.test 1dbf1d06b0a7eb36237b4f107cfb3da9726b449e
|
||||
F test/main.test e8c4d9ca6d1e5f5e55e6550d31aec488883b2ed9
|
||||
F test/malloc.test 082206002cb3162fbbed1c3dd3794a06cee86652
|
||||
F test/malloc.test a78617ce8258388e4835f4834a3a2c0d4282a7ec
|
||||
F test/memdb.test b8a13fa79f006bd087bbcf135ce8eb62056a6027
|
||||
F test/memleak.test 26571a04575461f39a7cf97a2ee2f7fb2f519ddb
|
||||
F test/minmax.test 3f87d1d49f7e9aa9ae80d35c47a1f5b034557899
|
||||
@ -229,7 +229,7 @@ F www/tclsqlite.tcl 19191cf2a1010eaeff74c51d83fd5f5a4d899075
|
||||
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
|
||||
F www/version3.tcl 563ba3ac02f64da27ab17f3edbe8e56bfd0293fb
|
||||
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
|
||||
P 440bfd2ac57d228d10913aca81ca8c6d7f38aa61
|
||||
R 33c3a7e7a8eaf64864de650e0dd92206
|
||||
U drh
|
||||
Z b1d9e2fd14f2166ab626a20625f8587e
|
||||
P 5cda1cda63bef554f8b3436bd958014f453087c2
|
||||
R 233a4cd5164642db4057352be7dd3517
|
||||
U danielk1977
|
||||
Z 2f1f04242ccfcca0027666d04e1cf454
|
||||
|
@ -1 +1 @@
|
||||
5cda1cda63bef554f8b3436bd958014f453087c2
|
||||
3c8512bc549e10ee131cb7f2d4e74d96e9de74a0
|
@ -18,7 +18,7 @@
|
||||
** file simultaneously, or one process from reading the database while
|
||||
** another is writing.
|
||||
**
|
||||
** @(#) $Id: pager.c,v 1.144 2004/06/26 08:38:25 danielk1977 Exp $
|
||||
** @(#) $Id: pager.c,v 1.145 2004/06/26 13:51:34 danielk1977 Exp $
|
||||
*/
|
||||
#include "os.h" /* Must be first to enable large file support */
|
||||
#include "sqliteInt.h"
|
||||
@ -1435,6 +1435,7 @@ int sqlite3pager_open(
|
||||
}
|
||||
}
|
||||
if( !zFullPathname ){
|
||||
sqlite3OsClose(&fd);
|
||||
return SQLITE_NOMEM;
|
||||
}
|
||||
if( rc!=SQLITE_OK ){
|
||||
|
@ -126,6 +126,8 @@ int sqlite3VdbeOp3(Vdbe *p, int op, int p1, int p2, const char *zP3,int p3type){
|
||||
** The VDBE knows that a P2 value is a label because labels are
|
||||
** always negative and P2 values are suppose to be non-negative.
|
||||
** Hence, a negative P2 value is a label that has yet to be resolved.
|
||||
**
|
||||
** Zero is returned if a malloc() fails.
|
||||
*/
|
||||
int sqlite3VdbeMakeLabel(Vdbe *p){
|
||||
int i;
|
||||
@ -1309,17 +1311,15 @@ int sqlite3VdbeReset(Vdbe *p){
|
||||
** the result code. Write any error message text into *pzErrMsg.
|
||||
*/
|
||||
int sqlite3VdbeFinalize(Vdbe *p){
|
||||
int rc;
|
||||
int rc = SQLITE_OK;
|
||||
sqlite *db;
|
||||
|
||||
if( p->magic!=VDBE_MAGIC_RUN && p->magic!=VDBE_MAGIC_HALT ){
|
||||
if( p->magic==VDBE_MAGIC_INIT ){
|
||||
sqlite3Error(p->db, SQLITE_MISUSE, 0);
|
||||
}
|
||||
if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
|
||||
rc = sqlite3VdbeReset(p);
|
||||
}else if( p->magic!=VDBE_MAGIC_INIT ){
|
||||
/* sqlite3Error(p->db, SQLITE_MISUSE, 0); */
|
||||
return SQLITE_MISUSE;
|
||||
}
|
||||
db = p->db;
|
||||
rc = sqlite3VdbeReset(p);
|
||||
sqlite3VdbeDelete(p);
|
||||
if( rc==SQLITE_SCHEMA ){
|
||||
sqlite3ResetInternalSchema(db, 0);
|
||||
|
@ -14,7 +14,7 @@
|
||||
# special feature is used to see what happens in the library if a malloc
|
||||
# were to really fail due to an out-of-memory situation.
|
||||
#
|
||||
# $Id: malloc.test,v 1.8 2004/06/19 00:16:31 drh Exp $
|
||||
# $Id: malloc.test,v 1.9 2004/06/26 13:51:34 danielk1977 Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
@ -65,6 +65,12 @@ for {set go 1; set i 1} {$go} {incr i} {
|
||||
} {1 1}
|
||||
}
|
||||
|
||||
# Ensure that no file descriptors were leaked.
|
||||
do_test malloc-1.X {
|
||||
catch {db close}
|
||||
set sqlite_open_file_count
|
||||
} {0}
|
||||
|
||||
set fd [open ./data.tmp w]
|
||||
for {set i 1} {$i<=20} {incr i} {
|
||||
puts $fd "$i\t[expr {$i*$i}]\t[expr {100-$i}] abcdefghijklmnopqrstuvwxyz"
|
||||
@ -115,6 +121,12 @@ for {set go 1; set i 1} {$go} {incr i} {
|
||||
} {1 1}
|
||||
}
|
||||
|
||||
# Ensure that no file descriptors were leaked.
|
||||
do_test malloc-2.X {
|
||||
catch {db close}
|
||||
set sqlite_open_file_count
|
||||
} {0}
|
||||
|
||||
for {set go 1; set i 1} {$go} {incr i} {
|
||||
do_test malloc-3.$i {
|
||||
sqlite_malloc_fail 0
|
||||
@ -155,6 +167,13 @@ for {set go 1; set i 1} {$go} {incr i} {
|
||||
}
|
||||
} {1 1}
|
||||
}
|
||||
|
||||
# Ensure that no file descriptors were leaked.
|
||||
do_test malloc-3.X {
|
||||
catch {db close}
|
||||
set sqlite_open_file_count
|
||||
} {0}
|
||||
|
||||
for {set go 1; set i 1} {$go} {incr i} {
|
||||
do_test malloc-4.$i {
|
||||
sqlite_malloc_fail 0
|
||||
@ -196,6 +215,13 @@ for {set go 1; set i 1} {$go} {incr i} {
|
||||
}
|
||||
} {1 1}
|
||||
}
|
||||
|
||||
# Ensure that no file descriptors were leaked.
|
||||
do_test malloc-4.X {
|
||||
catch {db close}
|
||||
set sqlite_open_file_count
|
||||
} {0}
|
||||
|
||||
for {set go 1; set i 1} {$go} {incr i} {
|
||||
do_test malloc-5.$i {
|
||||
sqlite_malloc_fail 0
|
||||
@ -230,5 +256,12 @@ for {set go 1; set i 1} {$go} {incr i} {
|
||||
}
|
||||
} {1 1}
|
||||
}
|
||||
|
||||
# Ensure that no file descriptors were leaked.
|
||||
do_test malloc-5.X {
|
||||
catch {db close}
|
||||
set sqlite_open_file_count
|
||||
} {0}
|
||||
|
||||
sqlite_malloc_fail 0
|
||||
finish_test
|
||||
|
Reference in New Issue
Block a user