am 6bbf67c1: Merge changes Ieecda65d,Idf3cbdab

# By Yongil Jang (1) and git-lg-database.lge.com (1)
# Via Gerrit Code Review (1) and git-lg-database.lge.com (1)
* commit '6bbf67c11ea1b7e8e9769113072c167e822fe73f':
  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
diff --git a/dist/sqlite3.c b/dist/sqlite3.c
index 8cdf8de..a43031b 100644
--- a/dist/sqlite3.c
+++ b/dist/sqlite3.c
@@ -24853,6 +24853,13 @@
 */
 #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:
@@ -29091,11 +29098,19 @@
         ** 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
       }
     }
 
@@ -72599,6 +72614,14 @@
         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;