+/** Track a temporary cursor */
+#define CURSOR_TMP_TRACK(mc, mn, dummy, tracked) \
+ if (mc->mc_flags & C_SUB) { \
+ dummy.mc_flags = C_INITIALIZED; \
+ dummy.mc_xcursor = (MDB_xcursor *)&mn; \
+ tracked = &dummy; \
+ } else { \
+ tracked = &mn; \
+ } \
+ tracked->mc_next = mc->mc_txn->mt_cursors[mc->mc_dbi]; \
+ mc->mc_txn->mt_cursors[mc->mc_dbi] = tracked
+
+/** Stop tracking a temporary cursor */
+#define CURSOR_TMP_UNTRACK(mc, tracked) \
+ mc->mc_txn->mt_cursors[mc->mc_dbi] = tracked->mc_next
+