SQLite

Check-in [f270004016]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:When a "full", "restart" or "truncate" checkpoint is attempted, return SQLITE_BUSY if a reader prevents the checkpointer from copying any frames at all into the database file.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | ota-update
Files: files | file ages | folders
SHA1: f270004016ef20f1963e0f1ad32e76bcbaeb6798
User & Date: dan 2015-01-28 15:30:03.968
Context
2015-01-28
20:37
Add missing VdbeCoverage() macros to the sqlite3_index_writer() implementation. (check-in: 6f8cda26e9 user: drh tags: ota-update)
15:30
When a "full", "restart" or "truncate" checkpoint is attempted, return SQLITE_BUSY if a reader prevents the checkpointer from copying any frames at all into the database file. (check-in: f270004016 user: dan tags: ota-update)
12:27
Correctly detect errors returned by walCheckpointStart() due to OOM. (check-in: 8e878c2023 user: drh tags: ota-update)
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/wal.c.
1820
1821
1822
1823
1824
1825
1826


1827
1828
1829
1830
1831
1832
1833
#endif
    }

    /* Release the reader lock held while backfilling */
    walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1);
    walIteratorFree(p->pIter);
    p->pIter = 0;


  }

  return p->rc;
}

/*
** The following is guaranteed when this function is called:







>
>







1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
#endif
    }

    /* Release the reader lock held while backfilling */
    walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1);
    walIteratorFree(p->pIter);
    p->pIter = 0;
  }else if( p->rc==SQLITE_DONE ){
    p->rc = SQLITE_OK;
  }

  return p->rc;
}

/*
** The following is guaranteed when this function is called:
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
  WalCkpt sC;

  /* EVIDENCE-OF: R-62920-47450 The busy-handler callback is never invoked
  ** in the SQLITE_CHECKPOINT_PASSIVE mode. */
  assert( eMode!=SQLITE_CHECKPOINT_PASSIVE || xBusy==0 );

  rc = walCheckpointStart(pWal, zBuf, nBuf, xBusy, pBusyArg, sync_flags, &sC);
  if( sC.pIter==0 || rc!=SQLITE_OK ) goto walcheckpoint_out;

  /* Step the checkpoint object until it reports something other than 
  ** SQLITE_OK.  */
  while( SQLITE_OK==(rc = walCheckpointStep(&sC)) );
  rc = walCheckpointFinalize(&sC);

  /* If this is an SQLITE_CHECKPOINT_RESTART or TRUNCATE operation, and the







|







1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
  WalCkpt sC;

  /* EVIDENCE-OF: R-62920-47450 The busy-handler callback is never invoked
  ** in the SQLITE_CHECKPOINT_PASSIVE mode. */
  assert( eMode!=SQLITE_CHECKPOINT_PASSIVE || xBusy==0 );

  rc = walCheckpointStart(pWal, zBuf, nBuf, xBusy, pBusyArg, sync_flags, &sC);
  if( rc!=SQLITE_OK ) goto walcheckpoint_out;

  /* Step the checkpoint object until it reports something other than 
  ** SQLITE_OK.  */
  while( SQLITE_OK==(rc = walCheckpointStep(&sC)) );
  rc = walCheckpointFinalize(&sC);

  /* If this is an SQLITE_CHECKPOINT_RESTART or TRUNCATE operation, and the