From: mistachkin Date: Sat, 3 Mar 2012 13:15:25 +0000 (+0000) Subject: When compiled for WinRT, avoid using MapViewOfFile and GetFileAttributes. Also,... X-Git-Tag: version-3.7.13~11^2~43 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=287a48d67bf56c6a9d276393d1268e4c1fd8ef53;p=thirdparty%2Fsqlite.git When compiled for WinRT, avoid using MapViewOfFile and GetFileAttributes. Also, reset the private 'sleep' event handle when the VFS is cleaned up. FossilOrigin-Name: 38df8fc1b49d55b61cb168a61134b4a314a62f21 --- diff --git a/manifest b/manifest index d7e73c5cf1..6da3310223 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\scompiled\sfor\sWinRT,\savoid\susing\sthe\sFORMAT_MESSAGE_ALLOCATE_BUFFER\sflag\sto\sFormatMessage\s(i.e.\sbecause\sLocalFree\sis\sunavailable). -D 2012-03-02T23:53:54.759 +C When\scompiled\sfor\sWinRT,\savoid\susing\sMapViewOfFile\sand\sGetFileAttributes.\s\sAlso,\sreset\sthe\sprivate\s'sleep'\sevent\shandle\swhen\sthe\sVFS\sis\scleaned\sup. +D 2012-03-03T13:15:25.497 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -167,7 +167,7 @@ F src/os.h c3a9db9e8e16f564e1a40cea1687dad69634262c F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440 F src/os_unix.c 0e3d2942d228d0366fb80a3640f35caf413b66d1 -F src/os_win.c bde6f1867d1fca808dabf43f8caaa7130b3e666a +F src/os_win.c 26867d8bafe695eeb48b24859bbd7a2d56cbd9fe F src/pager.c 3955b62cdb5bb64559607cb474dd12a6c8e1d4a5 F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5 F src/parse.y 1ddd71ae55f4b7cbb2672526ea4de023de0f519e @@ -991,7 +991,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 -P 3e7ba3ddb956056b8132ed383feed4f329c634e0 -R fa5ae504586a17ee7bea7c3ad368dd9c +P 9eb331be7e905d11d9075ce1596478b55a7f488b +R aeb2dd36cdcdc79eb8c1f0db8889436a U mistachkin -Z c2c4f50ec9e4a87a7802b817ca07287e +Z 3283741a5ac47d4e9a6c7dd3f7a23bf5 diff --git a/manifest.uuid b/manifest.uuid index e7a6bb185c..de170bbabb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9eb331be7e905d11d9075ce1596478b55a7f488b \ No newline at end of file +38df8fc1b49d55b61cb168a61134b4a314a62f21 \ No newline at end of file diff --git a/src/os_win.c b/src/os_win.c index 4dddece33c..d48b2f9aa2 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -666,6 +666,11 @@ static struct win_syscall { { "GetFileInformationByHandleEx", (SYSCALL)0, 0 }, #endif + { "MapViewOfFileEx", (SYSCALL)MapViewOfFileEx, 0 }, + +#define osMapViewOfFileEx ((LPVOID(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,SIZE_T, \ + LPVOID))aSyscall[65].pCurrent) + }; /* End of the overrideable system calls */ /* @@ -2996,9 +3001,15 @@ static int winShmMap( if( hMap ){ int iOffset = pShmNode->nRegion*szRegion; int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity; +#if SQLITE_OS_WINRT + pMap = osMapViewOfFileEx(hMap, FILE_MAP_WRITE | FILE_MAP_READ, + 0, iOffset - iOffsetShift, szRegion + iOffsetShift, NULL + ); +#else pMap = osMapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ, 0, iOffset - iOffsetShift, szRegion + iOffsetShift ); +#endif OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n", (int)osGetCurrentProcessId(), pShmNode->nRegion, iOffset, szRegion, pMap ? "ok" : "failed")); @@ -3419,15 +3430,21 @@ static int winDelete( if( zConverted==0 ){ return SQLITE_IOERR_NOMEM; } + rc = 1; if( isNT() ){ - rc = 1; +#if SQLITE_OS_WINRT + WIN32_FILE_ATTRIBUTE_DATA sAttrData; + memset(&sAttrData, 0, sizeof(sAttrData)); + while( osGetFileAttributesExW(zConverted, GetFileExInfoStandard, + &sAttrData) && +#else while( osGetFileAttributesW(zConverted)!=INVALID_FILE_ATTRIBUTES && +#endif (rc = osDeleteFileW(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){} rc = rc ? SQLITE_OK : SQLITE_ERROR; } #ifdef SQLITE_WIN32_HAS_ANSI else{ - rc = 1; while( osGetFileAttributesA(zConverted)!=INVALID_FILE_ATTRIBUTES && (rc = osDeleteFileA(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){} rc = rc ? SQLITE_OK : SQLITE_ERROR; @@ -3834,7 +3851,7 @@ int sqlite3_os_init(void){ /* Double-check that the aSyscall[] array has been constructed ** correctly. See ticket [bb3a86e890c8e96ab] */ - assert( ArraySize(aSyscall)==65 ); + assert( ArraySize(aSyscall)==66 ); #if SQLITE_OS_WINRT sleepObj = osCreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET, @@ -3855,6 +3872,7 @@ int sqlite3_os_init(void){ int sqlite3_os_end(void){ #if SQLITE_OS_WINRT osCloseHandle(sleepObj); + sleepObj = NULL; #endif return SQLITE_OK; }