qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 3/5] colo-compare: release all unhandled packets


From: Hailiang Zhang
Subject: Re: [Qemu-devel] [PATCH 3/5] colo-compare: release all unhandled packets in finalize function
Date: Thu, 16 Feb 2017 13:25:48 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1


On 2017/2/16 10:27, Zhang Chen wrote:


On 02/15/2017 04:34 PM, zhanghailiang wrote:
We should release all unhandled packets before finalize colo compare.
Besides, we need to free connection_track_table, or there will be
a memory leak bug.

Signed-off-by: zhanghailiang<address@hidden>
---
   net/colo-compare.c | 20 ++++++++++++++++++++
   1 file changed, 20 insertions(+)

diff --git a/net/colo-compare.c b/net/colo-compare.c
index a16e2d5..809bad3 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -676,6 +676,23 @@ static void colo_compare_complete(UserCreatable *uc, Error 
**errp)
       return;
   }


This function in my patch "colo-compare and filter-rewriter work with
colo-frame "
Named 'colo_flush_connection', I think use 'flush' instead of 'release'
is better,


OK, i will fix it in next version, thanks.

Thanks
Zhang Chen


+static void colo_release_packets(void *opaque, void *user_data)
+{
+    CompareState *s = user_data;
+    Connection *conn = opaque;
+    Packet *pkt = NULL;
+
+    while (!g_queue_is_empty(&conn->primary_list)) {
+        pkt = g_queue_pop_head(&conn->primary_list);
+        compare_chr_send(&s->chr_out, pkt->data, pkt->size);
+        packet_destroy(pkt, NULL);
+    }
+    while (!g_queue_is_empty(&conn->secondary_list)) {
+        pkt = g_queue_pop_head(&conn->secondary_list);
+        packet_destroy(pkt, NULL);
+    }
+}
+
   static void colo_compare_class_init(ObjectClass *oc, void *data)
   {
       UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
@@ -707,9 +724,12 @@ static void colo_compare_finalize(Object *obj)
       g_main_loop_quit(s->compare_loop);
       qemu_thread_join(&s->thread);

+    /* Release all unhandled packets after compare thead exited */
+    g_queue_foreach(&s->conn_list, colo_release_packets, s);

       g_queue_free(&s->conn_list);

+    g_hash_table_destroy(s->connection_track_table);
       g_free(s->pri_indev);
       g_free(s->sec_indev);
       g_free(s->outdev);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]