summaryrefslogtreecommitdiff
path: root/sys/dev/syscons/scvtb.c
diff options
context:
space:
mode:
authorKazutaka YOKOTA <yokota@FreeBSD.org>2001-06-29 08:24:56 +0000
committerKazutaka YOKOTA <yokota@FreeBSD.org>2001-06-29 08:24:56 +0000
commit2317b701676c344a0392feb31a8e5c5521e4c91a (patch)
tree685c4dd6334f3cafc2107c56db84d9c62d7225dd /sys/dev/syscons/scvtb.c
parent5f431174f398eebb7947b7ea12d25b52ede6ef85 (diff)
Notes
Diffstat (limited to 'sys/dev/syscons/scvtb.c')
-rw-r--r--sys/dev/syscons/scvtb.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/dev/syscons/scvtb.c b/sys/dev/syscons/scvtb.c
index 2654a4ae265b..cbfde4c83359 100644
--- a/sys/dev/syscons/scvtb.c
+++ b/sys/dev/syscons/scvtb.c
@@ -62,9 +62,11 @@ sc_vtb_init(sc_vtb_t *vtb, int type, int cols, int rows, void *buf, int wait)
(vm_offset_t)malloc(cols*rows*sizeof(u_int16_t),
M_DEVBUF,
(wait) ? M_WAITOK : M_NOWAIT);
- if (vtb->vtb_buffer != NULL)
+ if (vtb->vtb_buffer != NULL) {
bzero((void *)sc_vtb_pointer(vtb, 0),
cols*rows*sizeof(u_int16_t));
+ vtb->vtb_flags |= VTB_ALLOCED;
+ }
} else {
vtb->vtb_buffer = (vm_offset_t)buf;
}
@@ -84,7 +86,6 @@ sc_vtb_destroy(sc_vtb_t *vtb)
{
vm_offset_t p;
- vtb->vtb_flags = 0;
vtb->vtb_cols = 0;
vtb->vtb_rows = 0;
vtb->vtb_size = 0;
@@ -95,12 +96,13 @@ sc_vtb_destroy(sc_vtb_t *vtb)
switch (vtb->vtb_type) {
case VTB_MEMORY:
case VTB_RINGBUFFER:
- if (p != NULL)
+ if ((vtb->vtb_flags & VTB_ALLOCED) && (p != NULL))
free((void *)p, M_DEVBUF);
break;
default:
break;
}
+ vtb->vtb_flags = 0;
vtb->vtb_type = VTB_INVALID;
}