*** 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; } /*