aboutsummaryrefslogtreecommitdiff
path: root/src/test_async.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test_async.c')
-rw-r--r--src/test_async.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/test_async.c b/src/test_async.c
index 13138cfb3..f4f564c84 100644
--- a/src/test_async.c
+++ b/src/test_async.c
@@ -621,13 +621,18 @@ static int getFileLock(AsyncLock *pLock){
assert(eRequired>=0 && eRequired<=SQLITE_LOCK_EXCLUSIVE);
}
}
+
if( eRequired>pLock->eLock ){
rc = sqlite3OsLock(pLock->pFile, eRequired);
- }else if(eRequired<pLock->eLock){
- rc = sqlite3OsUnlock(pLock->pFile, eRequired);
+ if( rc==SQLITE_OK ){
+ pLock->eLock = eRequired;
+ }
}
- if( rc==SQLITE_OK ){
- pLock->eLock = eRequired;
+ else if( eRequired<pLock->eLock && eRequired<=SQLITE_LOCK_SHARED ){
+ rc = sqlite3OsUnlock(pLock->pFile, eRequired);
+ if( rc==SQLITE_OK ){
+ pLock->eLock = eRequired;
+ }
}
}
@@ -932,11 +937,11 @@ static int asyncFullPathname(
/* Replace any occurences of "<path-component>/../" with "" */
if( iOut>0 && iIn<=(nPathOut-4)
&& zPathOut[iIn]=='/' && zPathOut[iIn+1]=='.'
- && zPathOut[iIn+2]=='.' && zPathOut[iIn+2]=='/'
+ && zPathOut[iIn+2]=='.' && zPathOut[iIn+3]=='/'
){
iIn += 3;
iOut--;
- for( ; iOut>0 && zPathOut[iOut]!='/'; iOut--);
+ for( ; iOut>0 && zPathOut[iOut-1]!='/'; iOut--);
continue;
}