diff options
author | joerg <joerg> | 2008-10-26 12:51:59 +0000 |
---|---|---|
committer | joerg <joerg> | 2008-10-26 12:51:59 +0000 |
commit | fbaaca3b4f410c2ae1ee116700b7cfdfb7315512 (patch) | |
tree | bdcf306b8d6deceacd0631868d9521d83730a34d /pkgtools/libnbcompat | |
parent | ae68ff2189137d96761122f9e869e14991d81e63 (diff) | |
download | pkgsrc-fbaaca3b4f410c2ae1ee116700b7cfdfb7315512.tar.gz |
Provide and use local mpool.h.
Diffstat (limited to 'pkgtools/libnbcompat')
-rw-r--r-- | pkgtools/libnbcompat/files/db/btree/btree.h | 4 | ||||
-rw-r--r-- | pkgtools/libnbcompat/files/db/mpool/mpool.c | 6 | ||||
-rw-r--r-- | pkgtools/libnbcompat/files/nbcompat/mpool.h | 103 |
3 files changed, 108 insertions, 5 deletions
diff --git a/pkgtools/libnbcompat/files/db/btree/btree.h b/pkgtools/libnbcompat/files/db/btree/btree.h index 6ddd9cabb08..6f4bb72f51f 100644 --- a/pkgtools/libnbcompat/files/db/btree/btree.h +++ b/pkgtools/libnbcompat/files/db/btree/btree.h @@ -1,4 +1,4 @@ -/* $NetBSD: btree.h,v 1.1 2008/10/10 00:21:43 joerg Exp $ */ +/* $NetBSD: btree.h,v 1.2 2008/10/26 12:51:59 joerg Exp $ */ /* NetBSD: btree.h,v 1.16 2008/08/26 21:18:38 joerg Exp */ /*- @@ -44,7 +44,7 @@ #define F_CLR(p, f) (p)->flags &= ~(f) #define F_ISSET(p, f) ((p)->flags & (f)) -#include <mpool.h> +#include <nbcompat/mpool.h> #define DEFMINKEYPAGE (2) /* Minimum keys per page */ #define MINCACHE (5) /* Minimum cached pages */ diff --git a/pkgtools/libnbcompat/files/db/mpool/mpool.c b/pkgtools/libnbcompat/files/db/mpool/mpool.c index 5c763d7651c..2190996879e 100644 --- a/pkgtools/libnbcompat/files/db/mpool/mpool.c +++ b/pkgtools/libnbcompat/files/db/mpool/mpool.c @@ -1,4 +1,4 @@ -/* $NetBSD: mpool.c,v 1.1 2008/10/10 00:21:44 joerg Exp $ */ +/* $NetBSD: mpool.c,v 1.2 2008/10/26 12:52:00 joerg Exp $ */ /* NetBSD: mpool.c,v 1.18 2008/09/11 12:58:00 joerg Exp */ /*- @@ -33,7 +33,7 @@ #include <nbcompat.h> #include <nbcompat/cdefs.h> -__RCSID("$NetBSD: mpool.c,v 1.1 2008/10/10 00:21:44 joerg Exp $"); +__RCSID("$NetBSD: mpool.c,v 1.2 2008/10/26 12:52:00 joerg Exp $"); #include <nbcompat/queue.h> #include <sys/stat.h> @@ -47,7 +47,7 @@ __RCSID("$NetBSD: mpool.c,v 1.1 2008/10/10 00:21:44 joerg Exp $"); #include <nbcompat/db.h> #define __MPOOLINTERFACE_PRIVATE -#include <mpool.h> +#include <nbcompat/mpool.h> #ifdef __weak_alias __weak_alias(mpool_close,_mpool_close) diff --git a/pkgtools/libnbcompat/files/nbcompat/mpool.h b/pkgtools/libnbcompat/files/nbcompat/mpool.h new file mode 100644 index 00000000000..b5034b7f3cf --- /dev/null +++ b/pkgtools/libnbcompat/files/nbcompat/mpool.h @@ -0,0 +1,103 @@ +/* $NetBSD: mpool.h,v 1.1 2008/10/26 12:52:00 joerg Exp $ */ + +/*- + * Copyright (c) 1991, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)mpool.h 8.2 (Berkeley) 7/14/94 + */ + +#ifndef _NBCOMPAT_MPOOL_H_ +#define _NBCOMPAT_MPOOL_H_ + +#include <nbcompat/cdefs.h> +#include <nbcompat/queue.h> + +/* + * The memory pool scheme is a simple one. Each in-memory page is referenced + * by a bucket which is threaded in up to two of three ways. All active pages + * are threaded on a hash chain (hashed by page number) and an lru chain. + * Inactive pages are threaded on a free chain. Each reference to a memory + * pool is handed an opaque MPOOL cookie which stores all of this information. + */ +#define HASHSIZE 128 +#define HASHKEY(pgno) ((pgno - 1) % HASHSIZE) + +/* The BKT structures are the elements of the queues. */ +typedef struct _bkt { + CIRCLEQ_ENTRY(_bkt) hq; /* hash queue */ + CIRCLEQ_ENTRY(_bkt) q; /* lru queue */ + void *page; /* page */ + pgno_t pgno; /* page number */ + +#define MPOOL_DIRTY 0x01 /* page needs to be written */ +#define MPOOL_PINNED 0x02 /* page is pinned into memory */ + uint8_t flags; /* flags */ +} BKT; + +typedef struct MPOOL { + CIRCLEQ_HEAD(_lqh, _bkt) lqh; /* lru queue head */ + /* hash queue array */ + CIRCLEQ_HEAD(_hqh, _bkt) hqh[HASHSIZE]; + pgno_t curcache; /* current number of cached pages */ + pgno_t maxcache; /* max number of cached pages */ + pgno_t npages; /* number of pages in the file */ + unsigned long pagesize; /* file page size */ + int fd; /* file descriptor */ + /* page in conversion routine */ + void (*pgin)(void *, pgno_t, void *); + /* page out conversion routine */ + void (*pgout)(void *, pgno_t, void *); + void *pgcookie; /* cookie for page in/out routines */ +#ifdef STATISTICS + unsigned long cachehit; + unsigned long cachemiss; + unsigned long pagealloc; + unsigned long pageflush; + unsigned long pageget; + unsigned long pagenew; + unsigned long pageput; + unsigned long pageread; + unsigned long pagewrite; +#endif +} MPOOL; + +__BEGIN_DECLS +MPOOL *mpool_open(void *, int, pgno_t, pgno_t); +void mpool_filter(MPOOL *, void (*)(void *, pgno_t, void *), + void (*)(void *, pgno_t, void *), void *); +void *mpool_new(MPOOL *, pgno_t *); +void *mpool_get(MPOOL *, pgno_t, unsigned int); +int mpool_put(MPOOL *, void *, unsigned int); +int mpool_sync(MPOOL *); +int mpool_close(MPOOL *); +#ifdef STATISTICS +void mpool_stat(MPOOL *); +#endif +__END_DECLS + +#endif /* _MPOOL_H_ */ |