From: drh Date: Fri, 10 Feb 2012 03:10:27 +0000 (+0000) Subject: Fix an important bug in the handling of EINTR in unixRead(). Never came X-Git-Tag: version-3.7.11~58 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c18b40462b66fb2d9460b39b33dde73f400d0da8;p=thirdparty%2Fsqlite.git Fix an important bug in the handling of EINTR in unixRead(). Never came up on x86 but crashes on sparc. FossilOrigin-Name: 1a16db0bca717a2582a48332d81854ca90d6d49b --- diff --git a/manifest b/manifest index b2cc45f469..6b465d4e87 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sboundary\scase\sfor\sthe\sinteger\saffinity\sroutine\sfor\snon-x86\sprocessors. -D 2012-02-10T01:25:13.282 +C Fix\san\simportant\sbug\sin\sthe\shandling\sof\sEINTR\sin\sunixRead().\s\sNever\scame\nup\son\sx86\sbut\scrashes\son\ssparc. +D 2012-02-10T03:10:27.620 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -166,7 +166,7 @@ F src/os.c e1acdc09ff3ac2412945cca9766e2dcf4675f31c F src/os.h 59beba555b65a450bd1d804220532971d4299f60 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440 -F src/os_unix.c 657672fab2580a84116c140b36ee3d6b6fc75b4e +F src/os_unix.c d509b369ed376c77bc547961844a105d3907e4fa F src/os_win.c 5ac061ae1326a71500cee578ed0fd9113b4f6a37 F src/pager.c 2d892f7b901a8867a33bc21742086165a3a99af8 F src/pager.h a435da8421dc7844b7f9c7f37b636c160c50208a @@ -989,7 +989,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 -P 16a471129d497f45935b5d00df7ce9ec731ee498 -R 6215b24575860936c7fbc53b2c141f64 +P bea05ddddf5089bac9b1aa9fe1d2cd24b069ad44 +R c0159fca8df351a2a43a5aba36c14e85 U drh -Z c3db51a3b8697db7ee0c8145390b81ef +Z fadd9eaaad3a4f73aa794a26fa5c7111 diff --git a/manifest.uuid b/manifest.uuid index 8cae51c372..45ce260926 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bea05ddddf5089bac9b1aa9fe1d2cd24b069ad44 \ No newline at end of file +1a16db0bca717a2582a48332d81854ca90d6d49b \ No newline at end of file diff --git a/src/os_unix.c b/src/os_unix.c index 13faac3a5e..5fad7aa2ce 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -5413,7 +5413,7 @@ static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){ memset(zBuf, 0, nBuf); #if !defined(SQLITE_TEST) { - int pid, fd; + int pid, fd, got; fd = robust_open("/dev/urandom", O_RDONLY, 0); if( fd<0 ){ time_t t; @@ -5424,7 +5424,7 @@ static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){ assert( sizeof(t)+sizeof(pid)<=(size_t)nBuf ); nBuf = sizeof(t) + sizeof(pid); }else{ - do{ nBuf = osRead(fd, zBuf, nBuf); }while( nBuf<0 && errno==EINTR ); + do{ got = osRead(fd, zBuf, nBuf); }while( got<0 && errno==EINTR ); robust_close(0, fd, __LINE__); } }