aboutsummaryrefslogtreecommitdiff
path: root/src/malloc.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2020-10-20 14:40:53 +0000
committerdrh <drh@noemail.net>2020-10-20 14:40:53 +0000
commit672f07c642fad9ad76b1a8cd1c1d196d0286ffc4 (patch)
tree9ad3491a469c959189d34c65f1afdd9bb1a8e5b8 /src/malloc.c
parent1a56fce614ff945827281208358c1864b522bc05 (diff)
downloadsqlite-672f07c642fad9ad76b1a8cd1c1d196d0286ffc4.tar.gz
sqlite-672f07c642fad9ad76b1a8cd1c1d196d0286ffc4.zip
Fix the sqlite3_hard_heap_limit() so that it works with sqlite3_realloc64()
in addition to sqlite3_malloc64(). Improvements to OOM processing and debugging aids in the fuzzcheck utility. FossilOrigin-Name: 602d7369166d406a26834aa47d71d565a17d377d32e41f308821a50b41f91896
Diffstat (limited to 'src/malloc.c')
-rw-r--r--src/malloc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/malloc.c b/src/malloc.c
index 70e6ff94e..35ad21ecc 100644
--- a/src/malloc.c
+++ b/src/malloc.c
@@ -474,12 +474,17 @@ void *sqlite3Realloc(void *pOld, u64 nBytes){
if( nOld==nNew ){
pNew = pOld;
}else if( sqlite3GlobalConfig.bMemstat ){
+ sqlite3_int64 nUsed;
sqlite3_mutex_enter(mem0.mutex);
sqlite3StatusHighwater(SQLITE_STATUS_MALLOC_SIZE, (int)nBytes);
nDiff = nNew - nOld;
- if( nDiff>0 && sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED) >=
+ if( nDiff>0 && (nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)) >=
mem0.alarmThreshold-nDiff ){
sqlite3MallocAlarm(nDiff);
+ if( mem0.hardLimit>0 && nUsed >= mem0.hardLimit - nDiff ){
+ sqlite3_mutex_leave(mem0.mutex);
+ return 0;
+ }
}
pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT