| Index: third_party/sqlite/src/ext/async/sqlite3async.c
|
| diff --git a/third_party/sqlite/src/ext/async/sqlite3async.c b/third_party/sqlite/src/ext/async/sqlite3async.c
|
| index a351eaa92261ebc48177fe716713f2207edae419..4ab39cac351ace28e1f59e7ceeb3bc570234e655 100644
|
| --- a/third_party/sqlite/src/ext/async/sqlite3async.c
|
| +++ b/third_party/sqlite/src/ext/async/sqlite3async.c
|
| @@ -944,7 +944,7 @@ static int asyncFileControl(sqlite3_file *id, int op, void *pArg){
|
| return SQLITE_OK;
|
| }
|
| }
|
| - return SQLITE_ERROR;
|
| + return SQLITE_NOTFOUND;
|
| }
|
|
|
| /*
|
| @@ -1044,15 +1044,18 @@ static int asyncOpen(
|
| char *z;
|
| int isAsyncOpen = doAsynchronousOpen(flags);
|
|
|
| - /* If zName is NULL, then the upper layer is requesting an anonymous file */
|
| + /* If zName is NULL, then the upper layer is requesting an anonymous file.
|
| + ** Otherwise, allocate enough space to make a copy of the file name (along
|
| + ** with the second nul-terminator byte required by xOpen).
|
| + */
|
| if( zName ){
|
| - nName = (int)strlen(zName)+1;
|
| + nName = (int)strlen(zName);
|
| }
|
|
|
| nByte = (
|
| sizeof(AsyncFileData) + /* AsyncFileData structure */
|
| 2 * pVfs->szOsFile + /* AsyncFileData.pBaseRead and pBaseWrite */
|
| - nName /* AsyncFileData.zName */
|
| + nName + 2 /* AsyncFileData.zName */
|
| );
|
| z = sqlite3_malloc(nByte);
|
| if( !z ){
|
| @@ -1507,6 +1510,7 @@ static void asyncWriterThread(void){
|
| case ASYNC_DELETE:
|
| ASYNC_TRACE(("DELETE %s\n", p->zBuf));
|
| rc = pVfs->xDelete(pVfs, p->zBuf, (int)p->iOffset);
|
| + if( rc==SQLITE_IOERR_DELETE_NOENT ) rc = SQLITE_OK;
|
| break;
|
|
|
| case ASYNC_OPENEXCLUSIVE: {
|
|
|