|
DB_ENV->memp_register
|
|
#include <db.h>
int
DB_ENV->memp_register(DB_ENV *env, int ftype,
int (*pgin_fcn)(DB_ENV *, db_pgno_t pgno, void *pgaddr, DBT *pgcookie),
int (*pgout_fcn)(DB_ENV *, db_pgno_t pgno, void *pgaddr, DBT *pgcookie));
Description
The DB_ENV->memp_register function registers page-in and page-out
functions for files of type ftype in the specified pool.
If the pgin_fcn function is non-NULL, it is called each time
a page is read into the memory pool from a file of type ftype, or
a page is created for a file of type ftype (see the
DB_MPOOL_CREATE flag for the DB_MPOOLFILE->get function).
If the pgout_fcn function is non-NULL, it is called each time
a page is written to a file of type ftype.
Both the pgin_fcn and pgout_fcn functions are called
with a reference to the current environment, the page number, a pointer
to the page being read or written, and any argument pgcookie
that was specified to the DB_MPOOLFILE->set_pgcookie function. The
pgin_fcn and pgout_fcn functions should return 0 on
success, and an applicable non-zero errno value on failure, in
which case the shared memory pool interface routine (and, by extension,
any Berkeley DB library function) calling it will also fail, returning that
errno value.
The purpose of the DB_ENV->memp_register function is to support processing
when pages are entered into, or flushed from, the pool. A file type must
be specified to make it possible for unrelated threads or processes that
are sharing a pool, to evict each other's pages from the pool. During
initialization, applications should call DB_ENV->memp_register for each
type of file requiring input or output processing that will be sharing
the underlying pool. (No registry is necessary for the standard Berkeley DB
access method types because DB->open registers them separately.)
If a thread or process does not call DB_ENV->memp_register for a file
type, it is impossible for it to evict pages for any file requiring input
or output processing from the pool. For this reason,
DB_ENV->memp_register should always be called by each application sharing
a pool for each type of file included in the pool, regardless of whether
or not the application itself uses files of that type.
There are no standard values for ftype, pgin_fcn,
pgout_fcn, and pgcookie, except that the ftype
value for a file must be a non-zero positive number because negative
numbers are reserved for internal use by the Berkeley DB library. For this
reason, applications sharing a pool must coordinate their values among
themselves.
The DB_ENV->memp_register function returns a non-zero error value on failure and 0 on success.
Errors
The DB_ENV->memp_register function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
If a catastrophic error has occurred, the DB_ENV->memp_register function may fail and return
DB_RUNRECOVERY, in which case all subsequent Berkeley DB calls will fail
in the same way.
See Also
DB_ENV->set_cachesize,
DB_ENV->set_mp_mmapsize,
DB_ENV->memp_fcreate,
DB_MPOOLFILE->close,
DB_MPOOLFILE->get,
DB_MPOOLFILE->open,
DB_MPOOLFILE->put,
DB_MPOOLFILE->set,
DB_MPOOLFILE->sync,
DB_ENV->memp_register,
DB_MPOOLFILE->set_clear_len,
DB_MPOOLFILE->set_fileid,
DB_MPOOLFILE->set_ftype,
DB_MPOOLFILE->set_lsn_offset,
DB_MPOOLFILE->set_pgcookie,
DB_ENV->memp_stat,
DB_ENV->memp_sync,
and
DB_ENV->memp_trickle.
Copyright Sleepycat Software
|