Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a potential segfault in the VFS logic that checks for fail renames out from under SQLite. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | apple-osx |
Files: | files | file ages | folders |
SHA1: |
650111f66721c33015f89cda4f5afcb6 |
User & Date: | drh 2015-08-28 15:35:30.777 |
Context
2015-09-01
| ||
18:40 | Merge the latest trunk enhancements. (check-in: 4af79477fd user: drh tags: apple-osx) | |
2015-08-28
| ||
15:35 | Fix a potential segfault in the VFS logic that checks for fail renames out from under SQLite. (check-in: 650111f667 user: drh tags: apple-osx) | |
13:27 | Disable the read-only WAL-mode database tests on the apple-osx branch because read-only WAL-mode databases are specifically disallowed by Apple-specific changes. (check-in: bd911496cb user: drh tags: apple-osx) | |
Changes
Changes to src/os_unix.c.
︙ | ︙ | |||
1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 | ** (3) The file has not been renamed or unlinked ** ** Issue sqlite3_log(SQLITE_WARNING,...) messages if anything is not right. */ static void verifyDbFile(unixFile *pFile){ struct stat buf; int rc; if( pFile->ctrlFlags & UNIXFILE_WARNED ){ /* One or more of the following warnings have already been issued. Do not ** repeat them so as not to clutter the error log */ return; } rc = osFstat(pFile->h, &buf); if( rc!=0 ){ | > | 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 | ** (3) The file has not been renamed or unlinked ** ** Issue sqlite3_log(SQLITE_WARNING,...) messages if anything is not right. */ static void verifyDbFile(unixFile *pFile){ struct stat buf; int rc; assert( pFile->zPath!=0 || pFile->pInode==0 ); if( pFile->ctrlFlags & UNIXFILE_WARNED ){ /* One or more of the following warnings have already been issued. Do not ** repeat them so as not to clutter the error log */ return; } rc = osFstat(pFile->h, &buf); if( rc!=0 ){ |
︙ | ︙ | |||
2382 2383 2384 2385 2386 2387 2388 | /* ** Close the file. */ static int nolockClose(sqlite3_file *id) { int rc = SQLITE_OK; unixFile *pFile = (unixFile *)id; unixEnterMutex(); | | < < < | | | | | | | | | | > | 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 | /* ** Close the file. */ static int nolockClose(sqlite3_file *id) { int rc = SQLITE_OK; unixFile *pFile = (unixFile *)id; unixEnterMutex(); if( pFile->pInode ){ assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 ); if( pFile->pInode->nLock ){ /* If there are outstanding locks, do not actually close the file just ** yet because that would clear those locks. Instead, add the file ** descriptor to pInode->pUnused list. It will be automatically closed ** when the last lock is cleared. */ setPendingFd(pFile); } releaseInodeInfo(pFile); } rc = closeUnixFile(id); unixLeaveMutex(); return rc; } /******************* End of the no-op lock implementation ********************* ******************************************************************************/ |
︙ | ︙ | |||
6480 6481 6482 6483 6484 6485 6486 | } if( pLockingStyle == &posixIoMethods #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE || pLockingStyle == &nfsIoMethods #endif /* support WAL mode on read only mounted filesystem */ | | | 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 | } if( pLockingStyle == &posixIoMethods #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE || pLockingStyle == &nfsIoMethods #endif /* support WAL mode on read only mounted filesystem */ || (pLockingStyle == &nolockIoMethods && zFilename!=0) ){ unixEnterMutex(); rc = findInodeInfo(pNew, &pNew->pInode); if( rc!=SQLITE_OK ){ /* If an error occurred in findInodeInfo(), close the file descriptor ** immediately, before releasing the mutex. findInodeInfo() may fail ** in two scenarios: |
︙ | ︙ |