]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Another attempt to get reuse of excess opcode array space working correctly
authordrh <drh@noemail.net>
Tue, 5 Jan 2016 03:39:25 +0000 (03:39 +0000)
committerdrh <drh@noemail.net>
Tue, 5 Jan 2016 03:39:25 +0000 (03:39 +0000)
on all architectures and platforms.

FossilOrigin-Name: 2f8583748abab1e15029d3a8693ba9a66c978c2b

manifest
manifest.uuid
src/vdbeaux.c

index 40d06113592a93275cf54d332e6eaa6e8257f2d7..c2c3d233a07d0ec106f5d5aaf3c2e6687f0c3513 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Permit\sthe\s'test_fs'\stest\smodule\sto\sbe\scompiled\sand\sused\son\sMinGW.
-D 2016-01-05T01:48:29.005
+C Another\sattempt\sto\sget\sreuse\sof\sexcess\sopcode\sarray\sspace\sworking\scorrectly\non\sall\sarchitectures\sand\splatforms.
+D 2016-01-05T03:39:25.682
 F Makefile.in 28bcd6149e050dff35d4dcfd97e890cd387a499d
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 5fff077fcc46de7714ed6eebb6159a4c00eab751
@@ -402,7 +402,7 @@ F src/vdbe.c 6ac8e5d808d48afc369316e147c191102f0584c1
 F src/vdbe.h efb7a8c1459e31f3ea4377824c6a7e4cb5068637
 F src/vdbeInt.h 75c2e82ee3357e9210c06474f8d9bdf12c81105d
 F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca
-F src/vdbeaux.c 141ee231ad190240d0d1ee133c9ea28eecd55824
+F src/vdbeaux.c 3308a07a6b0b64e22e83cbcc76773eaf330b056a
 F src/vdbeblob.c fdc4a81605ae7a35ae94a55bd768b66d6be16f15
 F src/vdbemem.c fdd1578e47bea61390d472de53c565781d81e045
 F src/vdbesort.c a7ec02da4494c59dfd071126dd3726be5a11459d
@@ -1406,7 +1406,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 1aa530144643582658c8c1dd66548662f950efe3
-R 6490ec858048a3d7899751e10a44fa21
-U mistachkin
-Z b205e33bbbedd23793ff52ce1287fb1d
+P ac27f38eef7a241d56124c263d9f8c91f372a77f
+R 60123ea1ef3684554ab03afc4196be5d
+U drh
+Z f77bc5a04736277ef260f43c3525df33
index 515a791f4f6ed36d7e759ac6b9d52c994df2d7ae..ea174478b62ad5607eb6ec601a0da7943327c877 100644 (file)
@@ -1 +1 @@
-ac27f38eef7a241d56124c263d9f8c91f372a77f
\ No newline at end of file
+2f8583748abab1e15029d3a8693ba9a66c978c2b
\ No newline at end of file
index de7f482126aea6b213a96fa4b3393fda87dedb67..dbbb2a6ccb1c0e75f0f2b9f3b1298fb1e78b6971 100644 (file)
@@ -1851,19 +1851,24 @@ void sqlite3VdbeMakeReady(
   /* zCsr will initially point to nFree bytes of unused space at the
   ** end of the opcode array, p->aOp.  The computation of nFree is
   ** conservative - it might be smaller than the true number of free
-  ** bytes, but never larger.  nFree might be negative.  But the allocation
-  ** loop will still function correctly.
+  ** bytes, but never larger.  nFree must be a multiple of 8 - it is
+  ** rounded down if is not.
   */
-  zCsr = ((u8*)p->aOp) + ROUND8(sizeof(Op)*p->nOp);      /* Available space */
-  nFree = pParse->szOpAlloc - ROUND8(sizeof(Op)*p->nOp); /* Size of zCsr */
-  if( nFree>0 ) memset(zCsr, 0, nFree);
+  n = ROUND8(sizeof(Op)*p->nOp);              /* Bytes of opcode space used */
+  zCsr = &((u8*)p->aOp)[n];                   /* Unused opcode space */
+  assert( EIGHT_BYTE_ALIGNMENT(zCsr) );
+  nFree = ROUNDDOWN8(pParse->szOpAlloc - n);  /* Bytes of unused space */
+  assert( nFree>=0 );
+  if( nFree>0 ){
+    memset(zCsr, 0, nFree);
+    assert( EIGHT_BYTE_ALIGNMENT(&zCsr[nFree]) );
+  }
 
   resolveP2Values(p, &nArg);
   p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort);
   if( pParse->explain && nMem<10 ){
     nMem = 10;
   }
-  assert( EIGHT_BYTE_ALIGNMENT(&zCsr[nFree]) );
   p->expired = 0;
 
   /* Memory for registers, parameters, cursor, etc, is allocated in two