+*** db/db_cam.c.orig 2006-01-11 03:19:21.000000000 +1100
+--- db/db_cam.c 2006-03-01 13:59:01.000000000 +1100
+***************
+*** 579,589 ****
+ flags == DB_NEXT || flags == DB_NEXT_DUP || flags == DB_PREV)) {
+ if (tmp_rmw && (ret = dbc_arg->c_am_writelock(dbc_arg)) != 0)
+ return (ret);
+! if ((ret = __db_c_idup(cp->opd, &opd, DB_POSITION)) != 0)
+ return (ret);
+
+! switch (ret =
+! opd->c_am_get(opd, key, data, flags, NULL)) {
+ case 0:
+ goto done;
+ case DB_NOTFOUND:
+--- 579,590 ----
+ flags == DB_NEXT || flags == DB_NEXT_DUP || flags == DB_PREV)) {
+ if (tmp_rmw && (ret = dbc_arg->c_am_writelock(dbc_arg)) != 0)
+ return (ret);
+! if (F_ISSET(dbc_arg, DBC_TRANSIENT))
+! opd = cp->opd;
+! else if ((ret = __db_c_idup(cp->opd, &opd, DB_POSITION)) != 0)
+ return (ret);
+
+! switch (ret = opd->c_am_get(opd, key, data, flags, NULL)) {
+ case 0:
+ goto done;
+ case DB_NOTFOUND:
+***************
+*** 596,607 ****
+--- 597,614 ----
+ if ((ret = __db_c_close(opd)) != 0)
+ goto err;
+ opd = NULL;
++ if (F_ISSET(dbc_arg, DBC_TRANSIENT))
++ cp->opd = NULL;
+ break;
+ }
+ goto err;
+ default:
+ goto err;
+ }
++ } else if (cp->opd != NULL && F_ISSET(dbc_arg, DBC_TRANSIENT)) {
++ if ((ret = __db_c_close(cp->opd)) != 0)
++ goto err;
++ cp->opd = NULL;
+ }
+
+ /*