if DB_LOCK not set, pin page across calls and don't copy key/data pair
SCCS-vsn: lib/libc/db/recno/rec_open.c 8.3
*/
#if defined(LIBC_SCCS) && !defined(lint)
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)rec_open.c 8.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)rec_open.c 8.3 (Berkeley) %G%";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
-__rec_open(fname, flags, mode, openinfo)
+__rec_open(fname, flags, mode, openinfo, dflags)
+ int flags, mode, dflags;
const RECNOINFO *openinfo;
{
BTREE *t;
const RECNOINFO *openinfo;
{
BTREE *t;
btopeninfo.prefix = NULL;
btopeninfo.lorder = openinfo->lorder;
dbp = __bt_open(openinfo->bfname,
btopeninfo.prefix = NULL;
btopeninfo.lorder = openinfo->lorder;
dbp = __bt_open(openinfo->bfname,
- O_RDWR, S_IRUSR | S_IWUSR, &btopeninfo);
+ O_RDWR, S_IRUSR | S_IWUSR, &btopeninfo, dflags);
- dbp = __bt_open(NULL, O_RDWR, S_IRUSR | S_IWUSR, NULL);
+ dbp = __bt_open(NULL, O_RDWR, S_IRUSR | S_IWUSR, NULL, dflags);
if (dbp == NULL)
goto err;
if (dbp == NULL)
goto err;
+ /* Toss any page pinned across calls. */
+ if (t->bt_pinned != NULL) {
+ mpool_put(t->bt_mp, t->bt_pinned, 0);
+ t->bt_pinned = NULL;
+ }
+
+ /* In-memory database can't have a file descriptor. */
if (ISSET(t, R_INMEM)) {
errno = ENOENT;
return (-1);
if (ISSET(t, R_INMEM)) {
errno = ENOENT;
return (-1);