1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-27 20:41:58 +03:00

Fix issues in the POSIX and Win32 interfaces for lsm1.

FossilOrigin-Name: 38ec41416679e8280d77c8a4913aa6a321784b1237a3fe409b8e256c5f4513de
This commit is contained in:
mistachkin
2017-06-29 19:08:52 +00:00
parent 1d1982c324
commit 97e8b3ea32
4 changed files with 29 additions and 24 deletions

View File

@ -355,7 +355,7 @@ int lsmPosixOsTestLock(lsm_file *pFile, int iLock, int nLock, int eType){
lock.l_whence = SEEK_SET; lock.l_whence = SEEK_SET;
lock.l_len = nLock; lock.l_len = nLock;
lock.l_type = aType[eType]; lock.l_type = aType[eType];
lock.l_start = (4096-iLock); lock.l_start = (4096-iLock-nLock+1);
if( fcntl(p->fd, F_GETLK, &lock) ){ if( fcntl(p->fd, F_GETLK, &lock) ){
rc = LSM_IOERR_BKPT; rc = LSM_IOERR_BKPT;

View File

@ -284,8 +284,8 @@ static int lsmWin32OsWrite(
int nRetry = 0; /* Number of retrys */ int nRetry = 0; /* Number of retrys */
memset(&overlapped, 0, sizeof(OVERLAPPED)); memset(&overlapped, 0, sizeof(OVERLAPPED));
overlapped.Offset = (LONG)(iOff & 0xffffffff); overlapped.Offset = (LONG)(iOff & 0XFFFFFFFF);
overlapped.OffsetHigh = (LONG)((iOff>>32) & 0x7fffffff); overlapped.OffsetHigh = (LONG)((iOff>>32) & 0x7FFFFFFF);
while( nRem>0 ){ while( nRem>0 ){
DWORD nWrite = 0; /* Bytes written using WriteFile */ DWORD nWrite = 0; /* Bytes written using WriteFile */
if( !WriteFile(pWin32File->hFile, aRem, nRem, &nWrite, &overlapped) ){ if( !WriteFile(pWin32File->hFile, aRem, nRem, &nWrite, &overlapped) ){
@ -297,8 +297,8 @@ static int lsmWin32OsWrite(
break; break;
} }
iOff += nWrite; iOff += nWrite;
overlapped.Offset = (LONG)(iOff & 0xffffffff); overlapped.Offset = (LONG)(iOff & 0xFFFFFFFF);
overlapped.OffsetHigh = (LONG)((iOff>>32) & 0x7fffffff); overlapped.OffsetHigh = (LONG)((iOff>>32) & 0x7FFFFFFF);
aRem += nWrite; aRem += nWrite;
nRem -= nWrite; nRem -= nWrite;
} }
@ -341,8 +341,8 @@ static int lsmWin32OsRead(
int nRetry = 0; /* Number of retrys */ int nRetry = 0; /* Number of retrys */
memset(&overlapped, 0, sizeof(OVERLAPPED)); memset(&overlapped, 0, sizeof(OVERLAPPED));
overlapped.Offset = (LONG)(iOff & 0xffffffff); overlapped.Offset = (LONG)(iOff & 0XFFFFFFFF);
overlapped.OffsetHigh = (LONG)((iOff>>32) & 0x7fffffff); overlapped.OffsetHigh = (LONG)((iOff>>32) & 0X7FFFFFFF);
while( !ReadFile(pWin32File->hFile, pData, nData, &nRead, &overlapped) && while( !ReadFile(pWin32File->hFile, pData, nData, &nRead, &overlapped) &&
GetLastError()!=ERROR_HANDLE_EOF ){ GetLastError()!=ERROR_HANDLE_EOF ){
if( win32RetryIoerr(pWin32File->pEnv, &nRetry) ) continue; if( win32RetryIoerr(pWin32File->pEnv, &nRetry) ) continue;
@ -546,7 +546,6 @@ static int win32Delete(
}else{ }else{
int nRetry = 0; int nRetry = 0;
DWORD attr; DWORD attr;
DWORD lastErrno;
do { do {
attr = GetFileAttributesW(zConverted); attr = GetFileAttributesW(zConverted);
@ -625,7 +624,7 @@ int lsmWin32OsTestLock(lsm_file *pFile, int iLock, int nLock, int eType){
if( eType>=LSM_LOCK_EXCL ) flags |= LOCKFILE_EXCLUSIVE_LOCK; if( eType>=LSM_LOCK_EXCL ) flags |= LOCKFILE_EXCLUSIVE_LOCK;
memset(&ovlp, 0, sizeof(OVERLAPPED)); memset(&ovlp, 0, sizeof(OVERLAPPED));
ovlp.Offset = (4096-iLock); ovlp.Offset = (4096-iLock-nLock+1);
if( !LockFileEx(pWin32File->hFile, flags, 0, (DWORD)nLock, 0, &ovlp) ){ if( !LockFileEx(pWin32File->hFile, flags, 0, (DWORD)nLock, 0, &ovlp) ){
if( win32IsLockBusy(GetLastError()) ){ if( win32IsLockBusy(GetLastError()) ){
return LSM_BUSY; return LSM_BUSY;
@ -640,6 +639,10 @@ int lsmWin32OsTestLock(lsm_file *pFile, int iLock, int nLock, int eType){
int lsmWin32OsShmMap(lsm_file *pFile, int iChunk, int sz, void **ppShm){ int lsmWin32OsShmMap(lsm_file *pFile, int iChunk, int sz, void **ppShm){
int rc; int rc;
Win32File *pWin32File = (Win32File *)pFile; Win32File *pWin32File = (Win32File *)pFile;
int iOffset = iChunk * sz;
int iOffsetShift = iOffset % pWin32File->sysInfo.dwAllocationGranularity;
int nNew = iChunk + 1;
lsm_i64 nReq = nNew * sz;
*ppShm = NULL; *ppShm = NULL;
assert( sz>=0 ); assert( sz>=0 );
@ -648,8 +651,6 @@ int lsmWin32OsShmMap(lsm_file *pFile, int iChunk, int sz, void **ppShm){
int i; int i;
LPHANDLE ahNew; LPHANDLE ahNew;
LPVOID *apNew; LPVOID *apNew;
int nNew = iChunk+1;
lsm_i64 nReq = nNew * sz;
LARGE_INTEGER fileSize; LARGE_INTEGER fileSize;
/* If the shared-memory file has not been opened, open it now. */ /* If the shared-memory file has not been opened, open it now. */
@ -697,16 +698,15 @@ int lsmWin32OsShmMap(lsm_file *pFile, int iChunk, int sz, void **ppShm){
if( pWin32File->ahShm[iChunk]==NULL ){ if( pWin32File->ahShm[iChunk]==NULL ){
HANDLE hMap; HANDLE hMap;
assert( nReq<=0xFFFFFFFF );
hMap = CreateFileMappingW(pWin32File->hShmFile, NULL, PAGE_READWRITE, 0, hMap = CreateFileMappingW(pWin32File->hShmFile, NULL, PAGE_READWRITE, 0,
(DWORD)sz, NULL); (DWORD)nReq, NULL);
if( hMap==NULL ){ if( hMap==NULL ){
return LSM_IOERR_BKPT; return LSM_IOERR_BKPT;
} }
pWin32File->ahShm[iChunk] = hMap; pWin32File->ahShm[iChunk] = hMap;
} }
if( pWin32File->apShm[iChunk]==NULL ){ if( pWin32File->apShm[iChunk]==NULL ){
int iOffset = iChunk * sz;
int iOffsetShift = iOffset % pWin32File->sysInfo.dwAllocationGranularity;
LPVOID pMap; LPVOID pMap;
pMap = MapViewOfFile(pWin32File->ahShm[iChunk], pMap = MapViewOfFile(pWin32File->ahShm[iChunk],
FILE_MAP_WRITE | FILE_MAP_READ, 0, FILE_MAP_WRITE | FILE_MAP_READ, 0,
@ -716,7 +716,12 @@ int lsmWin32OsShmMap(lsm_file *pFile, int iChunk, int sz, void **ppShm){
} }
pWin32File->apShm[iChunk] = pMap; pWin32File->apShm[iChunk] = pMap;
} }
*ppShm = pWin32File->apShm[iChunk]; if( iOffsetShift!=0 ){
char *p = (char *)pWin32File->apShm[iChunk];
*ppShm = (void *)&p[iOffsetShift];
}else{
*ppShm = pWin32File->apShm[iChunk];
}
return LSM_OK; return LSM_OK;
} }

View File

@ -1,5 +1,5 @@
C Edit\scomments\sin\ssqlite.h.in\sused\sfor\sgenerating\sdocumentation,\sto\simprove\nthe\sdescription\sof\sthe\snew\ssqlite3_prepare_v3()\sinterfaces,\sand\sother\nmiscellaneous\scleanup.\s\sNo\schanges\sto\sexecutable\scode. C Fix\sissues\sin\sthe\sPOSIX\sand\sWin32\sinterfaces\sfor\slsm1.
D 2017-06-29T17:27:04.182 D 2017-06-29T19:08:52.350
F Makefile.in 081e48dfe7f995d57ce1a88ddf4d2917b4349158648a6cd45b42beae30de3a12 F Makefile.in 081e48dfe7f995d57ce1a88ddf4d2917b4349158648a6cd45b42beae30de3a12
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 4ebb1d257cac7fb1bcb4ba59278416d410ff1c4bf59447a9c37a415f3516056a F Makefile.msc 4ebb1d257cac7fb1bcb4ba59278416d410ff1c4bf59447a9c37a415f3516056a
@ -247,10 +247,10 @@ F ext/lsm1/lsm_shared.c 54cc3a5157c6abd77f7d3ae60708b9f7bf022b3c
F ext/lsm1/lsm_sorted.c 4a9e3ffecda87b379ed757b59c9cbcd84a80b55c F ext/lsm1/lsm_sorted.c 4a9e3ffecda87b379ed757b59c9cbcd84a80b55c
F ext/lsm1/lsm_str.c 77ebdd5040ddf267a6f724d4c83132d2dce8a226 F ext/lsm1/lsm_str.c 77ebdd5040ddf267a6f724d4c83132d2dce8a226
F ext/lsm1/lsm_tree.c 5d9fb2bc58a1a70c75126bd8d7198f7b627e165b F ext/lsm1/lsm_tree.c 5d9fb2bc58a1a70c75126bd8d7198f7b627e165b
F ext/lsm1/lsm_unix.c ee0201dff10ce2008ef13a65f52a6ea348f287e795270f651596f812fcfccdcc F ext/lsm1/lsm_unix.c 14aaebdd7a7e9abb57cc16890c8444b241de272bfc2303b68f6e6b984040dc1e
F ext/lsm1/lsm_varint.c b19ae9bd26b5a1e8402fb8a564b25d9542338a41 F ext/lsm1/lsm_varint.c b19ae9bd26b5a1e8402fb8a564b25d9542338a41
F ext/lsm1/lsm_vtab.c fff303ce03168eca9e333add3c1429b3471674b0 F ext/lsm1/lsm_vtab.c fff303ce03168eca9e333add3c1429b3471674b0
F ext/lsm1/lsm_win32.c 29b76829d29921e1f2297d8400c37ffed23479e2a519a9421bf2467c9bfceea3 F ext/lsm1/lsm_win32.c 1759ec9869e379d6f53937ef33b79dc6bec72223999eb8c5598b024528d6c70d
F ext/misc/README.md 8e008c8d2b02e09096b31dfba033253ac27c6c06a18aa5826e299fa7601d90b2 F ext/misc/README.md 8e008c8d2b02e09096b31dfba033253ac27c6c06a18aa5826e299fa7601d90b2
F ext/misc/amatch.c 6db4607cb17c54b853a2d7c7c36046d004853f65b9b733e6f019d543d5dfae87 F ext/misc/amatch.c 6db4607cb17c54b853a2d7c7c36046d004853f65b9b733e6f019d543d5dfae87
F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb
@ -1627,7 +1627,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P cae647696769c9fcdc3beafdfdf74d8384217f4b22820e4545093bea7be58f7c P 284707a7b3514a55cce24292e45632b7033d6edcff5b27deac5118b27c7b2954
R 041dfa61180f96fedaa6fea92ed99ea9 R 95cb4cb8128c681b43b4c959f1b53467
U drh U mistachkin
Z 9aaf6aa4a967053c1f0cee197b5d2771 Z 32c14f0ac7b13bb59a0dfed0d249addc

View File

@ -1 +1 @@
284707a7b3514a55cce24292e45632b7033d6edcff5b27deac5118b27c7b2954 38ec41416679e8280d77c8a4913aa6a321784b1237a3fe409b8e256c5f4513de