]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge the latest trunk enhancements into the wal-shm-exceptions branch.
authordrh <>
Mon, 10 Jul 2023 18:05:23 +0000 (18:05 +0000)
committerdrh <>
Mon, 10 Jul 2023 18:05:23 +0000 (18:05 +0000)
FossilOrigin-Name: f655d08d019bab0c578886e91ca24fd956d1b3dea9b9c9104812b3cf62e5e556

1  2 
manifest
manifest.uuid
src/util.c
src/wal.c

diff --cc manifest
index b5661ba17ea6605b2fe24a91b54a8b9a567c9bae,58dc9db6f288c28e57ce6c1377801a4e892c6438..3c7a4ef6e273ea00150de346cec90d33276ec0d1
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Merge\sall\srecent\strunk\senhancements\sinto\sthe\swal-shm-exceptions\sbranch.
- D 2023-07-06T17:55:33.956
 -C Always\suse\sthe\s"LL"\ssuffix\son\s64-bit\sinteger\sliterals.
 -D 2023-07-08T17:42:24.748
++C Merge\sthe\slatest\strunk\senhancements\sinto\sthe\swal-shm-exceptions\sbranch.
++D 2023-07-10T18:05:23.333
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
  F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@@ -638,11 -638,11 +638,11 @@@ F src/random.c 606b00941a1d7dd09c381d32
  F src/resolve.c 37953a5f36c60bea413c3c04efcd433b6177009f508ef2ace0494728912fe2e9
  F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
  F src/select.c 3ab1186290a311a8ceed1286c0e286209f7fe97b2d02c7593258004ce295dd88
- F src/shell.c.in e01d7e1d8a6b158320c97c955e1b14763289b82a73e3a155fa8efe0d546f0567
+ F src/shell.c.in d320d8a13636de06d777cc1eab981caca304e175464e98183cf4ea68d93db818
 -F src/sqlite.h.in f999ef3642f381d69679b2516b430dbcb6c5a2a951b7f5e43dc4751b474a5774
 +F src/sqlite.h.in 6a0ffe5886af2528baff6087efb34a4915d2ff394d15df32e6e2de8524b756d2
  F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
  F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4
- F src/sqliteInt.h f6c5470b7db42318a3de1115757e94b76570ad7697ac547823e01f1166756f1d
+ F src/sqliteInt.h 002a6c3e24752d123468c5d948a80e2cd4acf01badce268f9dd98b581cd7bb96
  F src/sqliteLimit.h 33b1c9baba578d34efe7dfdb43193b366111cdf41476b1e82699e14c11ee1fb6
  F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
  F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@@ -705,22 -705,22 +705,22 @@@ F src/trigger.c ad6ab9452715fa9a8075442
  F src/update.c 0aa36561167a7c40d01163238c297297962f31a15a8d742216b3c37cdf25f731
  F src/upsert.c 5303dc6c518fa7d4b280ec65170f465c7a70b7ac2b22491598f6d0b4875b3145
  F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
- F src/util.c 5b7b61614e33f6bbbe251af90a2097082cc16870949a8cdef834ed9919e65425
 -F src/util.c fea6fffdee3cdae917a66b70deec59d4f238057cfd6de623d15cf990c196940d
++F src/util.c 161e49e88b080c2370a4990aa55f51f9edcaf8c41c3cb06cd4c37ffde1c85e6d
  F src/vacuum.c 604fcdaebe76f3497c855afcbf91b8fa5046b32de3045bab89cc008d68e40104
  F src/vdbe.c 74282a947234513872a83b0bab1b8c644ece64b3e27b053ef17677c8ff9c81e0
  F src/vdbe.h 41485521f68e9437fdb7ec4a90f9d86ab294e9bb8281e33b235915e29122cfc0
  F src/vdbeInt.h 7bd49eef8f89c1a271fbf12d80a206bf56c876814c5fc6bee340f4e1907095ae
  F src/vdbeapi.c de9703f8705afc393cc2864669ce28cf9516983c8331d59aa2b978de01634365
 -F src/vdbeaux.c b5e3f7e158518b4eca6f166ac43900640a3fe9735c710e12bfa119af21059339
 +F src/vdbeaux.c d56f179577cee110d1d60129a07d37035e85b0d39a272d7587f3dbb99b40b94a
  F src/vdbeblob.c 2516697b3ee8154eb8915f29466fb5d4f1ae39ee8b755ea909cefaf57ec5e2ce
- F src/vdbemem.c aed58a560caab12540f7c14c43ee188636017814e21247a97902f78de2d43117
+ F src/vdbemem.c cf4a1556dd5b18c071cf7c243373c29ce752eb516022e3ad49ba72f08b785033
  F src/vdbesort.c 0d40dca073c94e158ead752ef4225f4fee22dee84145e8c00ca2309afb489015
  F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823
  F src/vdbevtab.c aae4bd769410eb7e1d02c42613eec961d514459b1c3c1c63cfc84e92a137daac
  F src/vtab.c 1ecf8c3745d29275688d583e12822fa984d421e0286b5ef50c137bc3bf6d7a64
  F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
- F src/wal.c 7f6fba5d543b0a6bc434bc7b61a7706355449404289087042485a97c4edd469d
 -F src/wal.c cbfeeb7415baa545efa244dd34bb5af4ae953a206fed720c6fa7f1ef763ec122
 -F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
++F src/wal.c df70125aa233626b8aa56dd6be7cbbe7234e10e01a0610152e583b65eeebc474
 +F src/wal.h 04a9e53121d5076f2a173b0f2facb39d33047093fee71bd3bbe6b1f6f1f5fd4b
  F src/walker.c 7c7ea0115345851c3da4e04e2e239a29983b61fb5b038b94eede6aba462640e2
  F src/where.c 2dc708cf8b6a691fb79f16bbc46567497ee6f991043318d421e294b2da114d93
  F src/whereInt.h c7d19902863beadec1d04e66aca39c0bcd60b74f05f0eaa7422c7005dfc5d51a
@@@ -2044,8 -2043,8 +2044,8 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P 13a524b351a0812214b223aa4e0a9d778ae7a75cf9875da1147a09c5cb76b9fe ad2e39626e6115fd322ef9495ae3bcd91343d7131a725f1bf24211a51a21dcc2
- R 3e69d81c6558ef42f8b74b7ecdd6ab2d
 -P beab3c98639be531744e60440223bb9ee76bc15234aff05e5efb273c8241dfd8
 -R 0aeac1606c7bbc75dfae0a73d28601e5
++P e59cea2d851be68559e7d01a01cb05684c44d151d022ea9790ce99671016ab00 07d95ed60f0a17ea13b4bc19c2ab2ec9052fedd27c9e1e57a1ec6e3a6470e5b7
++R ccbc614d43527056706e7e54f93af172
  U drh
- Z 91a5c6cfeac66999b4150b279524c11c
 -Z 7fe2cdb685f595b3ff5ea313f1ff0511
++Z da656ee3765bdd3f9ae04fb3fd79cf86
  # Remove this line to create a well-formed Fossil manifest.
diff --cc manifest.uuid
index 7968ae6fb49567382c0199896568a822c961aedf,1161b8bd7fab387eb0cda42a3ebf1531c0314345..8d0a378f48d0f619b52f8af5583fe02e542eee96
@@@ -1,1 -1,1 +1,1 @@@
- e59cea2d851be68559e7d01a01cb05684c44d151d022ea9790ce99671016ab00
 -07d95ed60f0a17ea13b4bc19c2ab2ec9052fedd27c9e1e57a1ec6e3a6470e5b7
++f655d08d019bab0c578886e91ca24fd956d1b3dea9b9c9104812b3cf62e5e556
diff --cc src/util.c
Simple merge
diff --cc src/wal.c
index b9146528d7245d5694f0874b6cf81600b6ec01da,f4d0328b2b4f86ec122e11bc5ac56d82e9b1b683..1e1382129bf068025a7791635a920ec9f83f3d8c
+++ b/src/wal.c
@@@ -618,82 -610,6 +618,82 @@@ struct WalIterator 
      sizeof(ht_slot)*HASHTABLE_NSLOT + HASHTABLE_NPAGE*sizeof(u32) \
  )
  
-     RaiseException(EXCEPTION_IN_PAGE_ERROR, 0, 3, aArg);
 +#ifdef SQLITE_USE_SEH
 +
 +#include <Windows.h>
 +
 +# define SEH_TRY    __try { \
 +   assert( walAssertLockmask(pWal) && pWal->nSehTry==0 ); \
 +   VVA_ONLY(pWal->nSehTry++);
 +
 +# define SEH_EXCEPT(X) \
 +   VVA_ONLY(pWal->nSehTry--); \
 +   assert( pWal->nSehTry==0 ); \
 +   } __except( sehExceptionFilter(pWal, GetExceptionCode(), GetExceptionInformation() ) ){ X }
 +
 +# define SEH_INJECT_FAULT sehInjectFault(pWal) 
 +
 +/*
 +** The second argument is the return value of GetExceptionCode() for the 
 +** current exception. Return EXCEPTION_EXECUTE_HANDLER if the exception code
 +** indicates that the exception may have been caused by accessing the *-shm 
 +** file mapping. Or EXCEPTION_CONTINUE_SEARCH otherwise.
 +*/
 +static int sehExceptionFilter(Wal *pWal, int eCode, EXCEPTION_POINTERS *p){
 +  VVA_ONLY(pWal->nSehTry--);
 +  if( eCode==EXCEPTION_IN_PAGE_ERROR ){
 +    if( p && p->ExceptionRecord && p->ExceptionRecord->NumberParameters>=3 ){
 +      pWal->iSysErrno = (int)p->ExceptionRecord->ExceptionInformation[2];
 +    }
 +    return EXCEPTION_EXECUTE_HANDLER;
 +  }
 +  return EXCEPTION_CONTINUE_SEARCH;
 +}
 +
 +/*
 +** If one is configured, invoke the xTestCallback callback with 650 as
 +** the argument. If it returns true, throw the same exception that is
 +** thrown by the system if the *-shm file mapping is accessed after it
 +** has been invalidated.
 +*/
 +static void sehInjectFault(Wal *pWal){
 +  int res;
 +  assert( pWal->nSehTry>0 );
 +
 +  res = sqlite3FaultSim(650);
 +  if( res!=0 ){
 +    ULONG aArg[3];
 +    aArg[0] = 0;
 +    aArg[1] = 0;
 +    aArg[2] = (ULONG)res;
++    RaiseException(EXCEPTION_IN_PAGE_ERROR, 0, 3, (const ULONG*)aArg);
 +  }
 +}
 +
 +/*
 +** There are two ways to use this macro. To set a pointer to be freed
 +** if an exception is thrown:
 +**
 +**   SEH_FREE_ON_ERROR(0, pPtr);
 +**
 +** and to cancel the same:
 +**
 +**   SEH_FREE_ON_ERROR(pPtr, 0);
 +**
 +** In the first case, there must not already be a pointer registered to
 +** be freed. In the second case, pPtr must be the registered pointer.
 +*/
 +#define SEH_FREE_ON_ERROR(X,Y) \
 +  assert( (X==0 || Y==0) && pWal->pFree==X ); pWal->pFree = Y
 +
 +#else
 +# define SEH_TRY          VVA_ONLY(pWal->nSehTry++);
 +# define SEH_EXCEPT(X)    VVA_ONLY(pWal->nSehTry--); assert( pWal->nSehTry==0 );
 +# define SEH_INJECT_FAULT assert( pWal->nSehTry>0 );
 +# define SEH_FREE_ON_ERROR(X,Y)
 +#endif /* ifdef SQLITE_USE_SEH */
 +
 +
  /*
  ** Obtain a pointer to the iPage'th page of the wal-index. The wal-index
  ** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are