]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge latest trunk with this branch. mutexfree-shmlock
authordan <dan@noemail.net>
Mon, 24 Dec 2018 15:15:21 +0000 (15:15 +0000)
committerdan <dan@noemail.net>
Mon, 24 Dec 2018 15:15:21 +0000 (15:15 +0000)
FossilOrigin-Name: 606b1ead24eb5293d19542105bf2db64c9b1a76840a90a8f2c982146d76c007e

1  2 
manifest
manifest.uuid
src/os_unix.c
src/test_vfs.c
test/permutations.test

diff --cc manifest
index 2f7fef6936271fb4f15f2d9ef19b0fde041f5a3c,5dce7fd104307cd04a47fd04882c2582b511950e..8bd72d183a250710962a9742620911f5b52fde19
+++ b/manifest
@@@ -1,10 -1,10 +1,10 @@@
- C Make\sSQLITE_MFS_NSHARD\sa\scompile\stime\ssetting.
- D 2018-12-10T16:52:31.796
 -C Change\sthe\sway\sa\scomparison\sused\sto\sdetect\scorrupt\sdatabases\sin\sfts3\sis\sdone\nto\savoid\spotential\spointer\soverflow\sin\s32-bit\sbuilds.
 -D 2018-12-24T13:34:36.984
++C Merge\slatest\strunk\swith\sthis\sbranch.
++D 2018-12-24T15:15:21.032
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
- F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c
+ F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6
  F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
- F Makefile.msc b7d4a710fa3f0b8cfc532ff195b85dc1ba2a8ad34343cb3d67639f28f0a24306
+ F Makefile.msc 3c4c7e94419ff28cb68850188c9d153b343aed4c5ebed5965426232ed67ff9d9
  F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee
  F VERSION 453e2f4529ca208196d5567db28d549d7151f79efd33f6e6cfe6e613e583a0be
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
@@@ -491,7 -494,7 +494,7 @@@ F src/os.c 8aeb0b0f40f8f5b0da03fe497066
  F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432
  F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
  F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
- F src/os_unix.c e191348d66fcbcf137cb2497de2c1e2ccca3caac0515a42c1a1d38043f519e9e
 -F src/os_unix.c f6e91b8fd82af7afbfd073c4974ad6cdb8e62d9f65ceddb45167835a0567fdc0
++F src/os_unix.c 3de3133f268e98596a0b4ae81734539f0b01dd5e1a399834eb52bc4c9dcc66ae
  F src/os_win.c 85d9e532d0444ab6c16d7431490c2e279e282aa0917b0e988996b1ae0de5c5a0
  F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
  F src/pager.c 75e0f3cfa3962c714f519f8a3d1e67ecca1c91de0e010a036b988e40ce9e4c73
@@@ -563,7 -566,7 +566,7 @@@ F src/test_syscall.c 1073306ba2e9bfc886
  F src/test_tclsh.c 06317648b0d85a85fd823f7973b55535c59a3156c1ef59394fe511f932cfa78d
  F src/test_tclvar.c 33ff42149494a39c5fbb0df3d25d6fafb2f668888e41c0688d07273dcb268dfc
  F src/test_thread.c 911d15fb14e19c0c542bdc8aabf981c2f10a4858
- F src/test_vfs.c 194b8e78e9b4279bc69693cb5cfc343e0a08482c430a571ec96d80440e337a44
 -F src/test_vfs.c 4e31a7b98a401431c55590a0ac05f001f520f716d0707ec916b4022b8937fd06
++F src/test_vfs.c 9a53b40290db75833db58295485b955276daed99a2e57d7215719e175c0cfae0
  F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698
  F src/test_windirent.c a895e2c068a06644eef91a7f0a32182445a893b9a0f33d0cdb4283dca2486ac1
  F src/test_windirent.h 90dfbe95442c9762357fe128dc7ae3dc199d006de93eb33ba3972e0a90484215
@@@ -1181,7 -1187,7 +1187,7 @@@ F test/parser1.test 6ccdf5e459a5dc4673d
  F test/pcache.test c8acbedd3b6fd0f9a7ca887a83b11d24a007972b
  F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442
  F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
- F test/permutations.test c2e5f618a71d1a7e50216325dd056f6ec16439b3c98d87bcd2df381297e5dc97
 -F test/permutations.test 1f244543fbf05f3ef9a4596d7e7fe5d832b6d973c53a87189515e3c15db562a5
++F test/permutations.test 49b876f77f09f41cbd3b356935e946c26cbdd259b7dc9f4411529e75f966f277
  F test/pg_common.tcl 301ac19c1a52fd55166d26db929b3b89165c634d52b5f8ad76ea8cb06960db30
  F test/pragma.test c267bf02742c823a191960895b3d52933cebd7beee26757d1ed694f213fcd867
  F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f
@@@ -1783,7 -1792,7 +1793,7 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P d2c785f94cc6b704ce29147399e2c473fd0f4ff377f1379bd29178bf6d127c1a
- R 405c2e0a847d1dc9742f041e349c6a79
 -P 2b6494b1509f0d0189f98aa34c990eee99c775ff57826e79b2c5b0a12b4c97ad
 -R a02ab00644ca16cf9661dd1e6ee9ef5e
++P b9a741519055a8560ec1d0ab7d0c15ff8db53e740011825506cd2ede11c956f0 95a9a39ff784b960b62dd6298e722a620ba3f9c8b76839a49bbef35d7bc84a8e
++R 5ea7d8dcd45bcaea5cd65eff0166a924
  U dan
- Z 0d67b443d35d0a267898c50a3a55aea3
 -Z a6822b20c230c488499f3dd180c02a24
++Z 2093b49ffe85aadf6485d43886cf919f
diff --cc manifest.uuid
index 890ad2c80ff81aa5f7e051d8826521566f51454a,f23e83a210b483c16e9a1d9e4b4b7a98f6ad1df3..96305e0ff8b7638504cbaf7fa96f2722030610b6
@@@ -1,1 -1,1 +1,1 @@@
- b9a741519055a8560ec1d0ab7d0c15ff8db53e740011825506cd2ede11c956f0
 -95a9a39ff784b960b62dd6298e722a620ba3f9c8b76839a49bbef35d7bc84a8e
++606b1ead24eb5293d19542105bf2db64c9b1a76840a90a8f2c982146d76c007e
diff --cc src/os_unix.c
index 435e4cad08b8ed549c8977ffa9313283b3ebfa20,f20763e5b0bc96dbdb7947ec6f919081d946c845..2ce90fb25a56f21d159fe505656a991e4e70dfd1
@@@ -4811,83 -4765,6 +4811,79 @@@ shmpage_out
    return rc;
  }
  
-   unixShm *pX;                          /* For looping over all siblings */
 +#ifdef SQLITE_MUTEXFREE_SHMLOCK
 +static int unixMutexFreeShmlock(
 +  unixFile *pFd,             /* Database file holding the shared memory */
 +  int ofst,                  /* First lock to acquire or release */
 +  int n,                     /* Number of locks to acquire or release */
 +  int flags                  /* What to do with the lock */
 +){
 +  struct LockMapEntry {
 +    int iFirst;
 +    int nSlot;
 +  } aMap[9] = {
 +    { 0, 1 },
 +    { 1, 1 },
 +    { 2, 1 },
 +    { 3+0*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+1*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+2*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+3*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+4*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+5*SQLITE_MFS_NSHARD, 0 },
 +  };
 +
 +  unixShm *p = pFd->pShm;               /* The shared memory being locked */
-   int rc = SQLITE_OK;
-   int iIncr;
-   u16 mask;                             /* Mask of locks to take or release */
 +  unixShmNode *pShmNode = p->pShmNode;  /* The underlying file iNode */
 +
 +  if( flags & SQLITE_SHM_SHARED ){
 +    /* SHARED locks */
 +    u32 iOld, iNew, *ptr;
 +    int iIncr = -1;
 +    if( (flags & SQLITE_SHM_UNLOCK)==0 ){
 +      p->aMFCurrent[ofst] = (p->aMFCurrent[ofst] + 1) % aMap[ofst].nSlot;
 +      iIncr = 1;
 +    }
 +    ptr = &pShmNode->aMFSlot[aMap[ofst].iFirst + p->aMFCurrent[ofst]].nLock;
 +    do {
 +      iOld = *ptr;
 +      iNew = iOld + iIncr;
 +      if( iNew>SQLITE_MFS_EXCLUSIVE ){
 +        return SQLITE_BUSY;
 +      }
 +    }while( 0==unixCompareAndSwap(ptr, iOld, iNew) );
 +  }else{
 +    /* EXCLUSIVE locks */
 +    int iFirst = aMap[ofst].iFirst;
 +    int iLast = aMap[ofst+n].iFirst;
 +    int i;
 +    for(i=iFirst; i<iLast; i++){
 +      u32 *ptr = &pShmNode->aMFSlot[i].nLock;
 +      if( flags & SQLITE_SHM_UNLOCK ){
 +        assert( (*ptr)==SQLITE_MFS_EXCLUSIVE );
 +        *ptr = 0;
 +      }else{
 +        u32 iOld;
 +        do {
 +          iOld = *ptr;
 +          if( iOld>0 ){
 +            while( i>iFirst ){
 +              i--;
 +              pShmNode->aMFSlot[i].nLock = 0;
 +            }
 +            return SQLITE_BUSY;
 +          }
 +        }while( 0==unixCompareAndSwap(ptr, iOld, SQLITE_MFS_EXCLUSIVE) );
 +      }
 +    }
 +  }
 +
 +  return SQLITE_OK;
 +}
 +#else
 +# define unixMutexFreeShmlock(a,b,c,d) SQLITE_OK
 +#endif
 +
  /*
  ** Change the lock state for a shared-memory segment.
  **
diff --cc src/test_vfs.c
Simple merge
Simple merge