From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35407) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQgTC-0005d5-G0 for qemu-devel@nongnu.org; Fri, 22 Jul 2016 15:50:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bQgTB-00005l-5c for qemu-devel@nongnu.org; Fri, 22 Jul 2016 15:50:50 -0400 Received: from mail-oi0-x243.google.com ([2607:f8b0:4003:c06::243]:35948) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQgTB-00005a-0r for qemu-devel@nongnu.org; Fri, 22 Jul 2016 15:50:49 -0400 Received: by mail-oi0-x243.google.com with SMTP id d204so11270058oig.3 for ; Fri, 22 Jul 2016 12:50:48 -0700 (PDT) Sender: Corey Minyard From: minyard@acm.org Date: Fri, 22 Jul 2016 14:50:41 -0500 Message-Id: <1469217041-15358-5-git-send-email-minyard@acm.org> In-Reply-To: <1469217041-15358-1-git-send-email-minyard@acm.org> References: <1469217041-15358-1-git-send-email-minyard@acm.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH v3 4/4] ipmi_bmc_sim: Add a proper unrealize function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , minyard@acm.org, Corey Minyard From: Corey Minyard Add an unrealize function to free the timer allocated in the realize function, unregister the vmstate, and free any pending messages. Signed-off-by: Corey Minyard Reviewed-by: Marc-André Lureau --- hw/ipmi/ipmi_bmc_sim.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c index b742d8d..fe92b93 100644 --- a/hw/ipmi/ipmi_bmc_sim.c +++ b/hw/ipmi/ipmi_bmc_sim.c @@ -1780,12 +1780,28 @@ static void ipmi_sim_realize(DeviceState *dev, Error **errp) vmstate_register(NULL, 0, &vmstate_ipmi_sim, ibs); } +static void ipmi_sim_unrealize(DeviceState *dev, Error **errp) +{ + IPMIBmc *b = IPMI_BMC(dev); + IPMIRcvBufEntry *msg, *tmp; + IPMIBmcSim *ibs = IPMI_BMC_SIMULATOR(b); + + vmstate_unregister(NULL, &vmstate_ipmi_sim, ibs); + timer_del(ibs->timer); + timer_free(ibs->timer); + QTAILQ_FOREACH_SAFE(msg, &ibs->rcvbufs, entry, tmp) { + QTAILQ_REMOVE(&ibs->rcvbufs, msg, entry); + g_free(msg); + } +} + static void ipmi_sim_class_init(ObjectClass *oc, void *data) { DeviceClass *dc = DEVICE_CLASS(oc); IPMIBmcClass *bk = IPMI_BMC_CLASS(oc); dc->realize = ipmi_sim_realize; + dc->unrealize = ipmi_sim_unrealize; bk->handle_command = ipmi_sim_handle_command; } -- 2.7.4