@@ -1078,11 +1078,12 @@ struct MDB_txn {
1078
1078
* @ingroup internal
1079
1079
* @{
1080
1080
*/
1081
- #define DB_DIRTY 0x01 /**< DB was modified or is DUPSORT data */
1081
+ #define DB_DIRTY 0x01 /**< DB was written in this txn */
1082
1082
#define DB_STALE 0x02 /**< Named-DB record is older than txnID */
1083
1083
#define DB_NEW 0x04 /**< Named-DB handle opened in this txn */
1084
1084
#define DB_VALID 0x08 /**< DB handle is valid, see also #MDB_VALID */
1085
1085
#define DB_USRVALID 0x10 /**< As #DB_VALID, but not set for #FREE_DBI */
1086
+ #define DB_DUPDATA 0x20 /**< DB is #MDB_DUPSORT data */
1086
1087
/** @} */
1087
1088
/** In write txns, array of cursors for each DB */
1088
1089
MDB_cursor * * mt_cursors ;
@@ -6270,7 +6271,8 @@ mdb_cursor_touch(MDB_cursor *mc)
6270
6271
{
6271
6272
int rc = MDB_SUCCESS ;
6272
6273
6273
- if (mc -> mc_dbi >= CORE_DBS && !(* mc -> mc_dbflag & DB_DIRTY )) {
6274
+ if (mc -> mc_dbi >= CORE_DBS && !(* mc -> mc_dbflag & (DB_DIRTY |DB_DUPDATA ))) {
6275
+ /* Touch DB record of named DB */
6274
6276
MDB_cursor mc2 ;
6275
6277
MDB_xcursor mcx ;
6276
6278
if (TXN_DBI_CHANGED (mc -> mc_txn , mc -> mc_dbi ))
@@ -7331,7 +7333,7 @@ mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node)
7331
7333
}
7332
7334
DPRINTF (("Sub-db -%u root page %" Z "u" , mx -> mx_cursor .mc_dbi ,
7333
7335
mx -> mx_db .md_root ));
7334
- mx -> mx_dbflag = DB_VALID |DB_USRVALID |DB_DIRTY ; /* DB_DIRTY guides mdb_cursor_touch */
7336
+ mx -> mx_dbflag = DB_VALID |DB_USRVALID |DB_DUPDATA ;
7335
7337
#if UINT_MAX < SIZE_MAX
7336
7338
if (mx -> mx_dbx .md_cmp == mdb_cmp_int && mx -> mx_db .md_pad == sizeof (size_t ))
7337
7339
mx -> mx_dbx .md_cmp = mdb_cmp_clong ;
@@ -7357,7 +7359,7 @@ mdb_xcursor_init2(MDB_cursor *mc, MDB_xcursor *src_mx, int new_dupdata)
7357
7359
mx -> mx_cursor .mc_top = 0 ;
7358
7360
mx -> mx_cursor .mc_flags |= C_INITIALIZED ;
7359
7361
mx -> mx_cursor .mc_ki [0 ] = 0 ;
7360
- mx -> mx_dbflag = DB_VALID |DB_USRVALID |DB_DIRTY ; /* DB_DIRTY guides mdb_cursor_touch */
7362
+ mx -> mx_dbflag = DB_VALID |DB_USRVALID |DB_DUPDATA ;
7361
7363
#if UINT_MAX < SIZE_MAX
7362
7364
mx -> mx_dbx .md_cmp = src_mx -> mx_dbx .md_cmp ;
7363
7365
#endif
0 commit comments