37 #if defined(LIBC_SCCS) && !defined(lint)
38 static char sccsid[] =
"@(#)bt_close.c 8.7 (Berkeley) 8/17/94";
41 #include <sys/param.h>
49 #include "../include/db.h"
52 static int bt_meta __P((
BTREE *));
73 if (t->bt_pinned != NULL) {
74 mpool_put(t->bt_mp, t->bt_pinned, 0);
79 if (__bt_sync(dbp, 0) == RET_ERROR)
83 if (mpool_close(t->bt_mp) == RET_ERROR)
87 if (t->bt_cursor.key.data != NULL) {
88 free(t->bt_cursor.key.data);
89 t->bt_cursor.key.size = 0;
90 t->bt_cursor.key.data = NULL;
92 if (t->bt_rkey.data) {
93 free(t->bt_rkey.data);
95 t->bt_rkey.data = NULL;
97 if (t->bt_rdata.data) {
98 free(t->bt_rdata.data);
100 t->bt_rdata.data = NULL;
106 return (close(fd) ? RET_ERROR : RET_SUCCESS);
119 __bt_sync(dbp, flags)
129 if (t->bt_pinned != NULL) {
130 mpool_put(t->bt_mp, t->bt_pinned, 0);
140 if (F_ISSET(t, B_INMEM | B_RDONLY) || !F_ISSET(t, B_MODIFIED))
141 return (RET_SUCCESS);
143 if (F_ISSET(t, B_METADIRTY) && bt_meta(t) == RET_ERROR)
146 if ((status = mpool_sync(t->bt_mp)) == RET_SUCCESS)
147 F_CLR(t, B_MODIFIED);
168 if ((p = mpool_get(t->bt_mp, P_META, 0)) == NULL)
172 m.magic = BTREEMAGIC;
173 m.version = BTREEVERSION;
174 m.psize = t->bt_psize;
176 m.nrecs = t->bt_nrecs;
177 m.flags = F_ISSET(t, SAVEMETA);
179 memmove(p, &m,
sizeof(
BTMETA));
180 mpool_put(t->bt_mp, p, MPOOL_DIRTY);
181 return (RET_SUCCESS);