Asterisk - The Open Source Telephony Project
18.5.0
utils
db1-ast
btree
bt_page.c
Go to the documentation of this file.
1
/*-
2
* Copyright (c) 1990, 1993, 1994
3
* The Regents of the University of California. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. All advertising materials mentioning features or use of this software
14
* must display the following acknowledgement:
15
* This product includes software developed by the University of
16
* California, Berkeley and its contributors.
17
* 4. Neither the name of the University nor the names of its contributors
18
* may be used to endorse or promote products derived from this software
19
* without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
* SUCH DAMAGE.
32
*/
33
34
#if defined(LIBC_SCCS) && !defined(lint)
35
static
char
sccsid[] =
"@(#)bt_page.c 8.3 (Berkeley) 7/14/94"
;
36
#endif
/* LIBC_SCCS and not lint */
37
38
#include <sys/types.h>
39
40
#include <stdio.h>
41
42
#include "../include/db.h"
43
#include "
btree.h
"
44
45
/*
46
* __bt_free --
47
* Put a page on the freelist.
48
*
49
* Parameters:
50
* t: tree
51
* h: page to free
52
*
53
* Returns:
54
* RET_ERROR, RET_SUCCESS
55
*
56
* Side-effect:
57
* mpool_put's the page.
58
*/
59
int
60
__bt_free
(t, h)
61
BTREE
*t;
62
PAGE
*h;
63
{
64
/* Insert the page at the head of the free list. */
65
h->
prevpg
=
P_INVALID
;
66
h->
nextpg
= t->
bt_free
;
67
t->
bt_free
= h->
pgno
;
68
F_SET
(t,
B_METADIRTY
);
69
70
/* Make sure the page gets written back. */
71
return
(
mpool_put
(t->
bt_mp
, h,
MPOOL_DIRTY
));
72
}
73
74
/*
75
* __bt_new --
76
* Get a new page, preferably from the freelist.
77
*
78
* Parameters:
79
* t: tree
80
* npg: storage for page number.
81
*
82
* Returns:
83
* Pointer to a page, NULL on error.
84
*/
85
PAGE
*
86
__bt_new
(t, npg)
87
BTREE
*t;
88
pgno_t
*npg;
89
{
90
PAGE
*h;
91
92
if
(t->
bt_free
!=
P_INVALID
&&
93
(h =
mpool_get
(t->
bt_mp
, t->
bt_free
, 0)) !=
NULL
) {
94
*npg = t->
bt_free
;
95
t->
bt_free
= h->
nextpg
;
96
F_SET
(t,
B_METADIRTY
);
97
return
(h);
98
}
99
return
(
mpool_new
(t->
bt_mp
, npg));
100
}
_page
Definition:
btree.h:75
_page::pgno
pgno_t pgno
Definition:
btree.h:76
F_SET
#define F_SET(p, f)
Definition:
btree.h:40
mpool_put
int mpool_put(MPOOL *mp, void *page, u_int flags)
Definition:
mpool.c:251
btree.h
NULL
#define NULL
Definition:
resample.c:96
_btree
Definition:
btree.h:312
MPOOL_DIRTY
#define MPOOL_DIRTY
Definition:
mpool.h:61
mpool_get
void * mpool_get(MPOOL *mp, pgno_t pgno, u_int flags)
Definition:
mpool.c:165
__bt_free
int __bt_free(BTREE *t, PAGE *h)
Definition:
bt_page.c:60
_btree::bt_mp
MPOOL * bt_mp
Definition:
btree.h:313
pgno_t
u_int32_t pgno_t
Definition:
db.h:78
_page::nextpg
pgno_t nextpg
Definition:
btree.h:78
_page::prevpg
pgno_t prevpg
Definition:
btree.h:77
B_METADIRTY
#define B_METADIRTY
Definition:
btree.h:369
P_INVALID
#define P_INVALID
Definition:
btree.h:63
mpool_new
void * mpool_new(MPOOL *mp, pgno_t *pgnoaddr)
Definition:
mpool.c:130
__bt_new
PAGE * __bt_new(BTREE *t, pgno_t *npg)
Definition:
bt_page.c:86
_btree::bt_free
pgno_t bt_free
Definition:
btree.h:337
Generated on Sun Aug 8 2021 19:43:09 for Asterisk - The Open Source Telephony Project by
1.8.13