190792Sgshapiro/* 2261194Sgshapiro * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers. 390792Sgshapiro * All rights reserved. 490792Sgshapiro * 590792Sgshapiro * By using this file, you agree to the terms and conditions set 690792Sgshapiro * forth in the LICENSE file which can be found at the top level of 790792Sgshapiro * the sendmail distribution. 890792Sgshapiro */ 990792Sgshapiro 1090792Sgshapiro#include <sm/gen.h> 11266527SgshapiroSM_IDSTR(id, "@(#)$Id: t-heap.c,v 1.11 2013-11-22 20:51:43 ca Exp $") 1290792Sgshapiro 1390792Sgshapiro#include <sm/debug.h> 1490792Sgshapiro#include <sm/heap.h> 1590792Sgshapiro#include <sm/io.h> 1690792Sgshapiro#include <sm/test.h> 1790792Sgshapiro#include <sm/xtrap.h> 1890792Sgshapiro 1990792Sgshapiro#if SM_HEAP_CHECK 2090792Sgshapiroextern SM_DEBUG_T SmHeapCheck; 2190792Sgshapiro# define HEAP_CHECK sm_debug_active(&SmHeapCheck, 1) 22363466Sgshapiro#else 2390792Sgshapiro# define HEAP_CHECK 0 2490792Sgshapiro#endif /* SM_HEAP_CHECK */ 2590792Sgshapiro 2690792Sgshapiroint 2790792Sgshapiromain(argc, argv) 2890792Sgshapiro int argc; 2990792Sgshapiro char **argv; 3090792Sgshapiro{ 3190792Sgshapiro void *p; 3290792Sgshapiro 3390792Sgshapiro sm_test_begin(argc, argv, "test heap handling"); 3490792Sgshapiro if (argc > 1) 3590792Sgshapiro sm_debug_addsettings_x(argv[1]); 3690792Sgshapiro 3790792Sgshapiro p = sm_malloc(10); 3890792Sgshapiro SM_TEST(p != NULL); 3990792Sgshapiro p = sm_realloc_x(p, 20); 4090792Sgshapiro SM_TEST(p != NULL); 4190792Sgshapiro p = sm_realloc(p, 30); 4290792Sgshapiro SM_TEST(p != NULL); 4390792Sgshapiro if (HEAP_CHECK) 4490792Sgshapiro { 4590792Sgshapiro sm_dprintf("heap with 1 30-byte block allocated:\n"); 4690792Sgshapiro sm_heap_report(smioout, 3); 4790792Sgshapiro } 4890792Sgshapiro 4990792Sgshapiro if (HEAP_CHECK) 5090792Sgshapiro { 5190792Sgshapiro sm_free(p); 5290792Sgshapiro sm_dprintf("heap with 0 blocks allocated:\n"); 5390792Sgshapiro sm_heap_report(smioout, 3); 5490792Sgshapiro sm_dprintf("xtrap count = %d\n", SmXtrapCount); 5590792Sgshapiro } 5690792Sgshapiro 5790792Sgshapiro#if DEBUG 5890792Sgshapiro /* this will cause a core dump */ 5990792Sgshapiro sm_dprintf("about to free %p for the second time\n", p); 6090792Sgshapiro sm_free(p); 61363466Sgshapiro#endif 6290792Sgshapiro 6390792Sgshapiro return sm_test_end(); 6490792Sgshapiro} 65