| Index: third_party/sqlite/src/src/test_journal.c
 | 
| diff --git a/third_party/sqlite/src/src/test_journal.c b/third_party/sqlite/src/src/test_journal.c
 | 
| index 6e320b7abb0cacdfb22633b4a19c5a81a030b1f0..4e63bccf76735f99ec145e8d47ded75ad8a146c9 100644
 | 
| --- a/third_party/sqlite/src/src/test_journal.c
 | 
| +++ b/third_party/sqlite/src/src/test_journal.c
 | 
| @@ -160,6 +160,7 @@ static int jtRandomness(sqlite3_vfs*, int nByte, char *zOut);
 | 
|  static int jtSleep(sqlite3_vfs*, int microseconds);
 | 
|  static int jtCurrentTime(sqlite3_vfs*, double*);
 | 
|  static int jtCurrentTimeInt64(sqlite3_vfs*, sqlite3_int64*);
 | 
| +static int jtGetLastError(sqlite3_vfs*, int, char*);
 | 
|  
 | 
|  static sqlite3_vfs jt_vfs = {
 | 
|    2,                             /* iVersion */
 | 
| @@ -179,7 +180,7 @@ static sqlite3_vfs jt_vfs = {
 | 
|    jtRandomness,                  /* xRandomness */
 | 
|    jtSleep,                       /* xSleep */
 | 
|    jtCurrentTime,                 /* xCurrentTime */
 | 
| -  0,                             /* xGetLastError */
 | 
| +  jtGetLastError,                /* xGetLastError */
 | 
|    jtCurrentTimeInt64             /* xCurrentTimeInt64 */
 | 
|  };
 | 
|  
 | 
| @@ -256,7 +257,8 @@ static int jtClose(sqlite3_file *pFile){
 | 
|      *pp = p->pNext;
 | 
|    }
 | 
|    leaveJtMutex();
 | 
| -  return sqlite3OsClose(p->pReal);
 | 
| +  sqlite3OsClose(p->pReal);
 | 
| +  return SQLITE_OK;
 | 
|  }
 | 
|  
 | 
|  /*
 | 
| @@ -284,9 +286,10 @@ static int jtRead(
 | 
|  **   b) The file-name specified when the file was opened matches
 | 
|  **      all but the final 8 characters of the journal file name.
 | 
|  **
 | 
| -**   c) There is currently a reserved lock on the file.
 | 
| +**   c) There is currently a reserved lock on the file. This 
 | 
| +**      condition is waived if the noLock argument is non-zero.
 | 
|  **/
 | 
| -static jt_file *locateDatabaseHandle(const char *zJournal){
 | 
| +static jt_file *locateDatabaseHandle(const char *zJournal, int noLock){
 | 
|    jt_file *pMain = 0;
 | 
|    enterJtMutex();
 | 
|    for(pMain=g.pList; pMain; pMain=pMain->pNext){
 | 
| @@ -294,7 +297,7 @@ static jt_file *locateDatabaseHandle(const char *zJournal){
 | 
|      if( (pMain->flags&SQLITE_OPEN_MAIN_DB)
 | 
|       && ((int)strlen(pMain->zName)==nName)
 | 
|       && 0==memcmp(pMain->zName, zJournal, nName)
 | 
| -     && (pMain->eLock>=SQLITE_LOCK_RESERVED)
 | 
| +     && ((pMain->eLock>=SQLITE_LOCK_RESERVED) || noLock)
 | 
|      ){
 | 
|        break;
 | 
|      }
 | 
| @@ -516,7 +519,7 @@ static int jtWrite(
 | 
|    jt_file *p = (jt_file *)pFile;
 | 
|    if( p->flags&SQLITE_OPEN_MAIN_JOURNAL ){
 | 
|      if( iOfst==0 ){
 | 
| -      jt_file *pMain = locateDatabaseHandle(p->zName);
 | 
| +      jt_file *pMain = locateDatabaseHandle(p->zName, 0);
 | 
|        assert( pMain );
 | 
|    
 | 
|        if( iAmt==28 ){
 | 
| @@ -561,7 +564,7 @@ static int jtWrite(
 | 
|  
 | 
|    rc = sqlite3OsWrite(p->pReal, zBuf, iAmt, iOfst);
 | 
|    if( (p->flags&SQLITE_OPEN_MAIN_JOURNAL) && iAmt==12 ){
 | 
| -    jt_file *pMain = locateDatabaseHandle(p->zName);
 | 
| +    jt_file *pMain = locateDatabaseHandle(p->zName, 0);
 | 
|      int rc2 = readJournalFile(p, pMain);
 | 
|      if( rc==SQLITE_OK ) rc = rc2;
 | 
|    }
 | 
| @@ -575,7 +578,7 @@ static int jtTruncate(sqlite3_file *pFile, sqlite_int64 size){
 | 
|    jt_file *p = (jt_file *)pFile;
 | 
|    if( p->flags&SQLITE_OPEN_MAIN_JOURNAL && size==0 ){
 | 
|      /* Truncating a journal file. This is the end of a transaction. */
 | 
| -    jt_file *pMain = locateDatabaseHandle(p->zName);
 | 
| +    jt_file *pMain = locateDatabaseHandle(p->zName, 0);
 | 
|      closeTransaction(pMain);
 | 
|    }
 | 
|    if( p->flags&SQLITE_OPEN_MAIN_DB && p->pWritable ){
 | 
| @@ -603,11 +606,10 @@ static int jtSync(sqlite3_file *pFile, int flags){
 | 
|      ** jt_file.pWritable bitvec of the main database file associated with
 | 
|      ** this journal file.
 | 
|      */
 | 
| -    pMain = locateDatabaseHandle(p->zName);
 | 
| -    assert(pMain);
 | 
| +    pMain = locateDatabaseHandle(p->zName, 0);
 | 
|  
 | 
|      /* Set the bitvec values */
 | 
| -    if( pMain->pWritable ){
 | 
| +    if( pMain && pMain->pWritable ){
 | 
|        pMain->nSync++;
 | 
|        rc = readJournalFile(p, pMain);
 | 
|        if( rc!=SQLITE_OK ){
 | 
| @@ -729,7 +731,7 @@ static int jtDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
 | 
|    int nPath = (int)strlen(zPath);
 | 
|    if( nPath>8 && 0==strcmp("-journal", &zPath[nPath-8]) ){
 | 
|      /* Deleting a journal file. The end of a transaction. */
 | 
| -    jt_file *pMain = locateDatabaseHandle(zPath);
 | 
| +    jt_file *pMain = locateDatabaseHandle(zPath, 0);
 | 
|      if( pMain ){
 | 
|        closeTransaction(pMain);
 | 
|      }
 | 
| @@ -824,6 +826,10 @@ static int jtCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){
 | 
|    return g.pVfs->xCurrentTimeInt64(g.pVfs, pTimeOut);
 | 
|  }
 | 
|  
 | 
| +static int jtGetLastError(sqlite3_vfs *pVfs, int n, char *z){
 | 
| +  return g.pVfs->xGetLastError(g.pVfs, n, z);
 | 
| +}
 | 
| +
 | 
|  /**************************************************************************
 | 
|  ** Start of public API.
 | 
|  */
 | 
| 
 |