提交 8cad5516 编写于 作者: M Mark McLoughlin 提交者: Anthony Liguori

net: add qemu_purge_queued_packets()

If net client sends packets asynchronously, it needs to purge its queued
packets in cleanup() so as to prevent sent callbacks being invoked with
a freed client.
Signed-off-by: NMark McLoughlin <markmc@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 08b9d66b
......@@ -439,6 +439,22 @@ qemu_deliver_packet(VLANClientState *sender, const uint8_t *buf, int size)
return ret;
}
void qemu_purge_queued_packets(VLANClientState *vc)
{
VLANPacket **pp = &vc->vlan->send_queue;
while (*pp != NULL) {
VLANPacket *packet = *pp;
if (packet->sender == vc) {
*pp = packet->next;
qemu_free(packet);
} else {
pp = &packet->next;
}
}
}
void qemu_flush_queued_packets(VLANClientState *vc)
{
VLANPacket *packet;
......
......@@ -70,6 +70,7 @@ ssize_t qemu_sendv_packet_async(VLANClientState *vc, const struct iovec *iov,
void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
ssize_t qemu_send_packet_async(VLANClientState *vc, const uint8_t *buf,
int size, NetPacketSent *sent_cb);
void qemu_purge_queued_packets(VLANClientState *vc);
void qemu_flush_queued_packets(VLANClientState *vc);
void qemu_format_nic_info_str(VLANClientState *vc, uint8_t macaddr[6]);
void qemu_check_nic_model(NICInfo *nd, const char *model);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册