diff options
author | dan <dan@noemail.net> | 2015-04-11 20:20:29 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2015-04-11 20:20:29 +0000 |
commit | 96974bd393746f4544063c6e4fa94afa185d877b (patch) | |
tree | 35a2f9c95bd5d15ec2600116458f3830c5bf0681 /src/vdbesort.c | |
parent | dba04b6d8ebd28a4cee92edf8cbf8d11c2c061f7 (diff) | |
download | sqlite-96974bd393746f4544063c6e4fa94afa185d877b.tar.gz sqlite-96974bd393746f4544063c6e4fa94afa185d877b.zip |
Fix a problem with sorting large amounts of partially ordered data.
FossilOrigin-Name: acca97efda86a0c020854d2dd9da16f5879986b1
Diffstat (limited to 'src/vdbesort.c')
-rw-r--r-- | src/vdbesort.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/src/vdbesort.c b/src/vdbesort.c index bbdafa823..869ff4f2a 100644 --- a/src/vdbesort.c +++ b/src/vdbesort.c @@ -887,30 +887,24 @@ static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){ */ static void vdbeSortSubtaskCleanup(sqlite3 *db, SortSubtask *pTask){ sqlite3DbFree(db, pTask->pUnpacked); - pTask->pUnpacked = 0; #if SQLITE_MAX_WORKER_THREADS>0 /* pTask->list.aMemory can only be non-zero if it was handed memory ** from the main thread. That only occurs SQLITE_MAX_WORKER_THREADS>0 */ if( pTask->list.aMemory ){ sqlite3_free(pTask->list.aMemory); - pTask->list.aMemory = 0; }else #endif { assert( pTask->list.aMemory==0 ); vdbeSorterRecordFree(0, pTask->list.pList); } - pTask->list.pList = 0; if( pTask->file.pFd ){ sqlite3OsCloseFree(pTask->file.pFd); - pTask->file.pFd = 0; - pTask->file.iEof = 0; } if( pTask->file2.pFd ){ sqlite3OsCloseFree(pTask->file2.pFd); - pTask->file2.pFd = 0; - pTask->file2.iEof = 0; } + memset(pTask, 0, sizeof(SortSubtask)); } #ifdef SQLITE_DEBUG_SORTER_THREADS @@ -1090,6 +1084,7 @@ void sqlite3VdbeSorterReset(sqlite3 *db, VdbeSorter *pSorter){ for(i=0; i<pSorter->nTask; i++){ SortSubtask *pTask = &pSorter->aTask[i]; vdbeSortSubtaskCleanup(db, pTask); + pTask->pSorter = pSorter; } if( pSorter->list.aMemory==0 ){ vdbeSorterRecordFree(0, pSorter->list.pList); |