Skip to content
This repository has been archived by the owner on Nov 8, 2023. It is now read-only.

Commit

Permalink
Merge changes Ieecda65d,Idf3cbdab
Browse files Browse the repository at this point in the history
* changes:
  Fix bugs of database corruption following IO error on systems supporting atomic-write
  Fix bugs of sqlite that returns SIGBUS on disk full in WAL mode
  • Loading branch information
Jeffrey Brown authored and Gerrit Code Review committed Feb 7, 2013
2 parents 88d4c1f + 6ab557b commit 6bbf67c
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions dist/sqlite3.c
Expand Up @@ -24853,6 +24853,13 @@ SQLITE_API int sqlite3_os_end(void){
*/
#if SQLITE_OS_UNIX /* This file is used on unix only */

/* Use posix_fallocate() if it is available
*/
#if !defined(HAVE_POSIX_FALLOCATE) \
&& (_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L)
# define HAVE_POSIX_FALLOCATE 1
#endif

/*
** There are various methods for file locking used for concurrency
** control:
Expand Down Expand Up @@ -29091,11 +29098,19 @@ static int unixShmMap(
** the requested memory region.
*/
if( !bExtend ) goto shmpage_out;
#if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
if( osFallocate(pShmNode->h, sStat.st_size, nByte)!=0 ){
rc = unixLogError(SQLITE_FULL, "fallocate",
pShmNode->zFilename);
goto shmpage_out;
}
#else
if( robust_ftruncate(pShmNode->h, nByte) ){
rc = unixLogError(SQLITE_IOERR_SHMSIZE, "ftruncate",
pShmNode->zFilename);
goto shmpage_out;
}
#endif
}
}

Expand Down Expand Up @@ -72599,6 +72614,14 @@ static int createFile(JournalFile *p){
assert(p->iSize<=p->nBuf);
rc = sqlite3OsWrite(p->pReal, p->zBuf, p->iSize, 0);
}
if( rc!=SQLITE_OK ){
/* If an error occurred while writing to the file, close it before
** returning. This way, SQLite uses the in-memory journal data to
** roll back changes made to the internal page-cache before this
** function was called. */
sqlite3OsClose(pReal);
p->pReal = 0;
}
}
}
return rc;
Expand Down

0 comments on commit 6bbf67c

Please sign in to comment.