mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
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: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
08b9d66b96
commit
8cad55161c
2 changed files with 17 additions and 0 deletions
16
net.c
16
net.c
|
@ -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;
|
||||
|
|
1
net.h
1
net.h
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue