On Thu, May 28, 2009 at 04:38:50PM -0400, D. Richard Hipp wrote: > >> To debug, set a breakpoint on sqlite3Fault(). That routine is > >> called whenever an OOM fault is simulated. Run to the point of the > >> OOM fault that is causing the problem. Figure out which malloc() > >> is falling and why the problem is not being reported back up to > >> the top level.
The stack trace when sqlite3Fault() is called is this:
14671: ./testfixture test/a.test
----------------- lwp# 1 / thread# 1 --------------------
0807a065 sqlite3Fault (8139018, 1e8, 8043e1c, 8086a7f, 1e8, 1e4) + 1
0807a0de faultsimMalloc (1e8, 1e4, 8043e1c, 80866aa) + e
08086a7f mallocWithAlarm (1e4) + 63
08086b1f sqlite3Malloc (1e4, 81451b8, 8043e78, fef5e6ad) + 4b
08087029 sqlite3MallocZero (1e4, 8130d00, 8043eac, 80d3d9f) + 11
080d3e54 openDatabase (8043ef0) + cc
08083802 DbMain (0, 8115090, 3, 8120fa8) + 32a
fef17834 TclEvalObjvInternal (8115090, 3, 8120fa8, 0, 0, 0) + 200
fef3bf35 TclExecuteByteCode (8115090, 8161ed0) + 1199
fef3ad06 TclCompEvalObj (8115090, 8144e88) + 112
fef18661 Tcl_EvalObjEx (8115090, 8144e88, 0) + 69
...
fef52d07 Tcl_EvalFile (8115090, 8046e16, 80e890c, 1) + 2f
08083c9d main (2, 8046c98, 8046ca4, 8046c8c) + 231
08068a9d _start (2, 8046e08, 8046e16, 0, 8046e22, 8046e35) + 7d
----------------- lwp# 2 / thread# 2 --------------------
fed1cd07 pollsys (fec2ed30, 1, 0, 0)
fecd337e pselect (4, fec2ee10, fec2ee90, fec2ef10, 0, 0) + 19e
fecd368e select (4, fec2ee10, fec2ee90, fec2ef10, 0) + 7e
fef7e521 NotifierThreadProc (0) + 279
fed190a0 _thrp_setup (feb20200) + 70
fed19300 _lwp_start (feb20200, 0, 0, 0, 0, 0)
Tracing function entry/return from that point I see this:
1 <- sqlite3Fault 0
1 <- faultsimStep 1
1 <- faultsimMalloc 0
1 <- mallocWithAlarm 488
1 -> sqlite3_mutex_leave 13270897144254570
1 -> pthreadMutexLeave 13270897144257718
1 <- pthreadMutexLeave 135264012
1 -> mutex_unlock 13270897144264723
1 -> mutex_unlock_queue 13270897144269040
1 -> clear_lockbyte 13270897144272919
1 <- clear_lockbyte 16777216
1 <- mutex_unlock_queue 0
1 <- mutex_unlock 0
1 <- sqlite3Malloc 0
1 <- sqlite3MallocZero 0
1 -> sqlite3_errcode 13270897144288592
1 <- sqlite3_errcode 7
1 -> sqlite3_close 13270897144294292
1 <- sqlite3_close 0
1 <- openDatabase 0
1 -> sqlite3ApiExit 13270897144301787
1 <- sqlite3ApiExit 7
1 -> Tcl_DStringFree 13270897144307842
1 <- Tcl_DStringFree 0
(The number on entry is the current time, the number on return is the
return value.)
So sqlite3Malloc() does return 0 (NULL), and sqlite3_errcode() does
return 7 (SQLITE_NOMEM). Where else should I look?
Nico
--
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

