aboutsummaryrefslogtreecommitdiff
path: root/src/vdbesort.c
diff options
context:
space:
mode:
authordan <dan@noemail.net>2015-04-11 20:20:29 +0000
committerdan <dan@noemail.net>2015-04-11 20:20:29 +0000
commit96974bd393746f4544063c6e4fa94afa185d877b (patch)
tree35a2f9c95bd5d15ec2600116458f3830c5bf0681 /src/vdbesort.c
parentdba04b6d8ebd28a4cee92edf8cbf8d11c2c061f7 (diff)
downloadsqlite-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.c9
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);