t-rpool.c revision 266527
1251881Speter/*
2251881Speter * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers.
3251881Speter *	All rights reserved.
4251881Speter *
5251881Speter * By using this file, you agree to the terms and conditions set
6251881Speter * forth in the LICENSE file which can be found at the top level of
7251881Speter * the sendmail distribution.
8251881Speter */
9251881Speter
10251881Speter#include <sm/gen.h>
11251881SpeterSM_IDSTR(id, "@(#)$Id: t-rpool.c,v 1.19 2013-11-22 20:51:43 ca Exp $")
12251881Speter
13251881Speter#include <sm/debug.h>
14251881Speter#include <sm/heap.h>
15251881Speter#include <sm/rpool.h>
16251881Speter#include <sm/io.h>
17251881Speter#include <sm/test.h>
18251881Speter
19251881Speterstatic void
20251881Speterrfree __P((
21251881Speter	void *cx));
22251881Speter
23251881Speterstatic void
24251881Speterrfree(cx)
25251881Speter	void *cx;
26251881Speter{
27251881Speter	(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, "rfree freeing `%s'\n",
28251881Speter			     (char *) cx);
29251881Speter}
30251881Speter
31251881Speterint
32251881Spetermain(argc, argv)
33251881Speter	int argc;
34251881Speter	char *argv[];
35251881Speter{
36251881Speter	SM_RPOOL_T *rpool;
37251881Speter	char *a[26];
38251881Speter	int i, j;
39251881Speter	SM_RPOOL_ATTACH_T att;
40251881Speter
41251881Speter	sm_test_begin(argc, argv, "test rpool");
42251881Speter	sm_debug_addsetting_x("sm_check_heap", 1);
43251881Speter	rpool = sm_rpool_new_x(NULL);
44251881Speter	SM_TEST(rpool != NULL);
45251881Speter	att = sm_rpool_attach_x(rpool, rfree, "attachment #1");
46251881Speter	SM_TEST(att != NULL);
47251881Speter	for (i = 0; i < 26; ++i)
48251881Speter	{
49251881Speter		size_t sz = i * i * i;
50251881Speter
51251881Speter		a[i] = sm_rpool_malloc_x(rpool, sz);
52251881Speter		for (j = 0; j < sz; ++j)
53251881Speter			a[i][j] = 'a' + i;
54251881Speter	}
55251881Speter	att = sm_rpool_attach_x(rpool, rfree, "attachment #2");
56251881Speter	(void) sm_rpool_attach_x(rpool, rfree, "attachment #3");
57251881Speter	sm_rpool_detach(att);
58251881Speter
59251881Speter	/* XXX more tests? */
60251881Speter#if DEBUG
61251881Speter	sm_dprintf("heap after filling up rpool:\n");
62251881Speter	sm_heap_report(smioout, 3);
63251881Speter	sm_dprintf("freeing rpool:\n");
64251881Speter	sm_rpool_free(rpool);
65251881Speter	sm_dprintf("heap after freeing rpool:\n");
66251881Speter	sm_heap_report(smioout, 3);
67251881Speter#endif /* DEBUG */
68251881Speter	return sm_test_end();
69251881Speter}
70251881Speter