1 /***********************************************************************
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
21 ***********************************************************************/
22 #if defined(_UWIN) && defined(_BLD_ast)
24 void _STUB_vmclose(){}
30 /* Close down a region.
32 ** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94.
35 int vmclose(Vmalloc_t
* vm
)
41 Seg_t
*seg
, *vmseg
, *next
;
43 Vmdata_t
* vd
= vm
->data
;
49 if(!(vd
->mode
&VM_TRUST
) && ISLOCK(vd
,0))
52 if(vm
->disc
->exceptf
&&
53 (ev
= (*vm
->disc
->exceptf
)(vm
,VM_CLOSE
,NIL(Void_t
*),vm
->disc
)) < 0 )
56 /* make this region inaccessible until it disappears */
57 vd
->mode
&= ~VM_TRUST
;
60 if((vd
->mode
&VM_MTPROFILE
) && _Vmpfclose
)
63 /* remove from linked list of regions */
64 for(last
= Vmheap
, v
= last
->next
; v
; last
= v
, v
= v
->next
)
66 { last
->next
= v
->next
;
72 { vmseg
= NIL(Seg_t
*);
73 for(seg
= vd
->seg
; seg
; seg
= next
)
75 if(seg
->extent
== seg
->size
)
77 else (*vm
->disc
->memoryf
)(vm
,seg
->addr
,seg
->extent
,0,vm
->disc
);
80 (*vm
->disc
->memoryf
)(vm
,vmseg
->addr
,vmseg
->extent
,0,vm
->disc
);