Very small performance improvement by ensuring that the argument to
sqlite3VdbeFreeCursor() is non-NULL.  Hold for the next sprint.

FossilOrigin-Name: f8801ffd946d288099bc3af20602c0d2794b4542ce77b8e15a3d57cac28066a6
diff --git a/manifest b/manifest
index ceb2dae..5d8f21d 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\san\sSQL\ssyntax\serror\sin\sthe\scomment\son\sthe\somit-left-join\soptimization.\nNo\schanges\sto\scode.
-D 2020-01-16T12:25:14.066
+C Very\ssmall\sperformance\simprovement\sby\sensuring\sthat\sthe\sargument\sto\nsqlite3VdbeFreeCursor()\sis\snon-NULL.\s\sHold\sfor\sthe\snext\ssprint.
+D 2020-01-16T13:02:26.518
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -603,11 +603,11 @@
 F src/utf.c 736ff76753236ffbc8b5b939f5e0607f28aeaa7c780b3a56b419228f0a81c87b
 F src/util.c e5f3971160154e5c9b660fd119b02ec4890e87cd18a5bc4d45ee60cddbb9e6a2
 F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
-F src/vdbe.c 35dcc7d43c2635853773d994b052061283a4e5b0e60e799cef83e410d90f3145
+F src/vdbe.c bd36fa3624bee54181a227c37d65bdbaeb5369dd1a5008c9d29005d4f087225a
 F src/vdbe.h defd693289c7bb8d325f109be9490c77138061211a116827da7244b6015a4934
 F src/vdbeInt.h 30d3e8b991547cdf39025e416a0a737b0416d46747af70ae058f60e2e0466fe7
 F src/vdbeapi.c 1252d80c548711e47a6d84dae88ed4e95d3fbb4e7bd0eaa1347299af7efddf02
-F src/vdbeaux.c ff690e6c9314ef281de7c06f8c8c33393f0afca80aabb1fe69836dcf2d60b0bf
+F src/vdbeaux.c 236b9c612b8ee802c2e65b8d27dda36c87d7e8bba17bede59ff1c4f343cf9839
 F src/vdbeblob.c 253ed82894924c362a7fa3079551d3554cd1cdace39aa833da77d3bc67e7c1b1
 F src/vdbemem.c ad9e6217635f2b04df98bc57b12c98cefc9c0a1745cca47f4e8109119213253d
 F src/vdbesort.c a3be032cc3fee0e3af31773af4a7a6f931b7230a34f53282ccf1d9a2a72343be
@@ -1857,7 +1857,10 @@
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P af06f80a590e20f64fa2f630e85fa728c266ea4696b975cc5f2ab72a3b914379
-R 9a8c9df7f9259d9aaa9715d05b9ca046
+P 86b5e5a20e967af7ac444ff0a40c2e8b93b7e5c505eebf6d3753a341b05503a8
+R 47da7063528f28081fc2bb201dd0e23b
+T *branch * close-cursor-faster
+T *sym-close-cursor-faster *
+T -sym-trunk *
 U drh
-Z c83be37898e2cd5899ddcac01ce6852d
+Z 1ee70ee6e40038b3997c71f1bcb449bf
diff --git a/manifest.uuid b/manifest.uuid
index aa609bb..c30a18c 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-86b5e5a20e967af7ac444ff0a40c2e8b93b7e5c505eebf6d3753a341b05503a8
\ No newline at end of file
+f8801ffd946d288099bc3af20602c0d2794b4542ce77b8e15a3d57cac28066a6
\ No newline at end of file
diff --git a/src/vdbe.c b/src/vdbe.c
index 14c83bd..042e132 100644
--- a/src/vdbe.c
+++ b/src/vdbe.c
@@ -4053,8 +4053,10 @@
 */
 case OP_Close: {
   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
-  sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
-  p->apCsr[pOp->p1] = 0;
+  if( p->apCsr[pOp->p1] ){
+    sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
+    p->apCsr[pOp->p1] = 0;
+  }
   break;
 }
 
diff --git a/src/vdbeaux.c b/src/vdbeaux.c
index fab8b70..b0c1b25 100644
--- a/src/vdbeaux.c
+++ b/src/vdbeaux.c
@@ -1911,7 +1911,7 @@
   VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem];
   assert( sqlite3VdbeFrameIsValid(p) );
   for(i=0; i<p->nChildCsr; i++){
-    sqlite3VdbeFreeCursor(p->v, apCsr[i]);
+    if( apCsr[i] ) sqlite3VdbeFreeCursor(p->v, apCsr[i]);
   }
   releaseMemArray(aMem, p->nChildMem);
   sqlite3VdbeDeleteAuxData(p->v->db, &p->pAuxData, -1, 0);
@@ -2406,9 +2406,7 @@
 ** happens to hold.
 */
 void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
-  if( pCx==0 ){
-    return;
-  }
+  assert( pCx!=0 );
   assert( pCx->pBtx==0 || pCx->eCurType==CURTYPE_BTREE );
   switch( pCx->eCurType ){
     case CURTYPE_SORTER: {