mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 20:19:44 +00:00
lm32: do not leak memory on object_new/object_unref
Bottom halves and ptimers are malloced, but nothing in these files is freeing memory allocated by instance_init. Since these are sysctl devices that are never unrealized, just moving the allocations to realize is enough to avoid the leak in practice (and also to avoid upsetting asan when running device-introspect-test). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
parent
9739b11adc
commit
e97dd6b2b3
@ -186,9 +186,6 @@ static void lm32_timer_init(Object *obj)
|
|||||||
|
|
||||||
sysbus_init_irq(dev, &s->irq);
|
sysbus_init_irq(dev, &s->irq);
|
||||||
|
|
||||||
s->bh = qemu_bh_new(timer_hit, s);
|
|
||||||
s->ptimer = ptimer_init(s->bh, PTIMER_POLICY_DEFAULT);
|
|
||||||
|
|
||||||
memory_region_init_io(&s->iomem, obj, &timer_ops, s,
|
memory_region_init_io(&s->iomem, obj, &timer_ops, s,
|
||||||
"timer", R_MAX * 4);
|
"timer", R_MAX * 4);
|
||||||
sysbus_init_mmio(dev, &s->iomem);
|
sysbus_init_mmio(dev, &s->iomem);
|
||||||
@ -198,6 +195,9 @@ static void lm32_timer_realize(DeviceState *dev, Error **errp)
|
|||||||
{
|
{
|
||||||
LM32TimerState *s = LM32_TIMER(dev);
|
LM32TimerState *s = LM32_TIMER(dev);
|
||||||
|
|
||||||
|
s->bh = qemu_bh_new(timer_hit, s);
|
||||||
|
s->ptimer = ptimer_init(s->bh, PTIMER_POLICY_DEFAULT);
|
||||||
|
|
||||||
ptimer_set_freq(s->ptimer, s->freq_hz);
|
ptimer_set_freq(s->ptimer, s->freq_hz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,11 +283,6 @@ static void milkymist_sysctl_init(Object *obj)
|
|||||||
sysbus_init_irq(dev, &s->timer0_irq);
|
sysbus_init_irq(dev, &s->timer0_irq);
|
||||||
sysbus_init_irq(dev, &s->timer1_irq);
|
sysbus_init_irq(dev, &s->timer1_irq);
|
||||||
|
|
||||||
s->bh0 = qemu_bh_new(timer0_hit, s);
|
|
||||||
s->bh1 = qemu_bh_new(timer1_hit, s);
|
|
||||||
s->ptimer0 = ptimer_init(s->bh0, PTIMER_POLICY_DEFAULT);
|
|
||||||
s->ptimer1 = ptimer_init(s->bh1, PTIMER_POLICY_DEFAULT);
|
|
||||||
|
|
||||||
memory_region_init_io(&s->regs_region, obj, &sysctl_mmio_ops, s,
|
memory_region_init_io(&s->regs_region, obj, &sysctl_mmio_ops, s,
|
||||||
"milkymist-sysctl", R_MAX * 4);
|
"milkymist-sysctl", R_MAX * 4);
|
||||||
sysbus_init_mmio(dev, &s->regs_region);
|
sysbus_init_mmio(dev, &s->regs_region);
|
||||||
@ -297,6 +292,11 @@ static void milkymist_sysctl_realize(DeviceState *dev, Error **errp)
|
|||||||
{
|
{
|
||||||
MilkymistSysctlState *s = MILKYMIST_SYSCTL(dev);
|
MilkymistSysctlState *s = MILKYMIST_SYSCTL(dev);
|
||||||
|
|
||||||
|
s->bh0 = qemu_bh_new(timer0_hit, s);
|
||||||
|
s->bh1 = qemu_bh_new(timer1_hit, s);
|
||||||
|
s->ptimer0 = ptimer_init(s->bh0, PTIMER_POLICY_DEFAULT);
|
||||||
|
s->ptimer1 = ptimer_init(s->bh1, PTIMER_POLICY_DEFAULT);
|
||||||
|
|
||||||
ptimer_set_freq(s->ptimer0, s->freq_hz);
|
ptimer_set_freq(s->ptimer0, s->freq_hz);
|
||||||
ptimer_set_freq(s->ptimer1, s->freq_hz);
|
ptimer_set_freq(s->ptimer1, s->freq_hz);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user