1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-12 13:01:09 +03:00

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
This commit is contained in:
mistachkin
2012-03-03 13:15:25 +00:00
parent 62d1924fc5
commit 287a48d67b
3 changed files with 28 additions and 10 deletions

View File

@@ -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). 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-02T23:53:54.759 D 2012-03-03T13:15:25.497
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34 F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -167,7 +167,7 @@ F src/os.h c3a9db9e8e16f564e1a40cea1687dad69634262c
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
F src/os_unix.c 0e3d2942d228d0366fb80a3640f35caf413b66d1 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.c 3955b62cdb5bb64559607cb474dd12a6c8e1d4a5
F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5 F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5
F src/parse.y 1ddd71ae55f4b7cbb2672526ea4de023de0f519e F src/parse.y 1ddd71ae55f4b7cbb2672526ea4de023de0f519e
@@ -991,7 +991,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
P 3e7ba3ddb956056b8132ed383feed4f329c634e0 P 9eb331be7e905d11d9075ce1596478b55a7f488b
R fa5ae504586a17ee7bea7c3ad368dd9c R aeb2dd36cdcdc79eb8c1f0db8889436a
U mistachkin U mistachkin
Z c2c4f50ec9e4a87a7802b817ca07287e Z 3283741a5ac47d4e9a6c7dd3f7a23bf5

View File

@@ -1 +1 @@
9eb331be7e905d11d9075ce1596478b55a7f488b 38df8fc1b49d55b61cb168a61134b4a314a62f21

View File

@@ -666,6 +666,11 @@ static struct win_syscall {
{ "GetFileInformationByHandleEx", (SYSCALL)0, 0 }, { "GetFileInformationByHandleEx", (SYSCALL)0, 0 },
#endif #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 */ }; /* End of the overrideable system calls */
/* /*
@@ -2996,9 +3001,15 @@ static int winShmMap(
if( hMap ){ if( hMap ){
int iOffset = pShmNode->nRegion*szRegion; int iOffset = pShmNode->nRegion*szRegion;
int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity; 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, pMap = osMapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ,
0, iOffset - iOffsetShift, szRegion + iOffsetShift 0, iOffset - iOffsetShift, szRegion + iOffsetShift
); );
#endif
OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n", OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n",
(int)osGetCurrentProcessId(), pShmNode->nRegion, iOffset, (int)osGetCurrentProcessId(), pShmNode->nRegion, iOffset,
szRegion, pMap ? "ok" : "failed")); szRegion, pMap ? "ok" : "failed"));
@@ -3419,15 +3430,21 @@ static int winDelete(
if( zConverted==0 ){ if( zConverted==0 ){
return SQLITE_IOERR_NOMEM; return SQLITE_IOERR_NOMEM;
} }
rc = 1;
if( isNT() ){ 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 && while( osGetFileAttributesW(zConverted)!=INVALID_FILE_ATTRIBUTES &&
#endif
(rc = osDeleteFileW(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){} (rc = osDeleteFileW(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){}
rc = rc ? SQLITE_OK : SQLITE_ERROR; rc = rc ? SQLITE_OK : SQLITE_ERROR;
} }
#ifdef SQLITE_WIN32_HAS_ANSI #ifdef SQLITE_WIN32_HAS_ANSI
else{ else{
rc = 1;
while( osGetFileAttributesA(zConverted)!=INVALID_FILE_ATTRIBUTES && while( osGetFileAttributesA(zConverted)!=INVALID_FILE_ATTRIBUTES &&
(rc = osDeleteFileA(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){} (rc = osDeleteFileA(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){}
rc = rc ? SQLITE_OK : SQLITE_ERROR; rc = rc ? SQLITE_OK : SQLITE_ERROR;
@@ -3834,7 +3851,7 @@ int sqlite3_os_init(void){
/* Double-check that the aSyscall[] array has been constructed /* Double-check that the aSyscall[] array has been constructed
** correctly. See ticket [bb3a86e890c8e96ab] */ ** correctly. See ticket [bb3a86e890c8e96ab] */
assert( ArraySize(aSyscall)==65 ); assert( ArraySize(aSyscall)==66 );
#if SQLITE_OS_WINRT #if SQLITE_OS_WINRT
sleepObj = osCreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET, sleepObj = osCreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET,
@@ -3855,6 +3872,7 @@ int sqlite3_os_init(void){
int sqlite3_os_end(void){ int sqlite3_os_end(void){
#if SQLITE_OS_WINRT #if SQLITE_OS_WINRT
osCloseHandle(sleepObj); osCloseHandle(sleepObj);
sleepObj = NULL;
#endif #endif
return SQLITE_OK; return SQLITE_OK;
} }