diff options
author | drh <drh@noemail.net> | 2020-10-20 14:40:53 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2020-10-20 14:40:53 +0000 |
commit | 672f07c642fad9ad76b1a8cd1c1d196d0286ffc4 (patch) | |
tree | 9ad3491a469c959189d34c65f1afdd9bb1a8e5b8 /src/malloc.c | |
parent | 1a56fce614ff945827281208358c1864b522bc05 (diff) | |
download | sqlite-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.c | 7 |
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 |