From: Hailiang Zhang <zhang.zhanghailiang@huawei.com>
To: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>,
qemu devel <qemu-devel@nongnu.org>,
Jason Wang <jasowang@redhat.com>
Cc: xuquan8@huawei.com
Subject: Re: [Qemu-devel] [PATCH] COLO-compare: Add compare_lock aviod comparison conflict
Date: Thu, 20 Apr 2017 14:20:06 +0800 [thread overview]
Message-ID: <58F85316.3010509@huawei.com> (raw)
In-Reply-To: <1492662763-13852-1-git-send-email-zhangchen.fnst@cn.fujitsu.com>
On 2017/4/20 12:32, Zhang Chen wrote:
> When network traffic heavy, compare_pri_rs_finalize() and
> compare_sec_rs_finalize() have a chance to confilct.
> Both of them call colo_compare_connection() to compare packet,
> But during compare_pri_rs_finalize() comparison, have secondary
> packet come and call compare_sec_rs_finalize(), that packet will be
> handle twice. If packet same, the pkt will be double free.
Interesting, if I'm right, this should not happen, because, all the comparing works
are done in colo compare thread, so there is no chance to access the connect_list
concurrently. Besides, even both of the packets from primary and secondary arrive
at the same time, it should only be handle once, we will handle it with the later arrived one,
No ?
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
> ---
> net/colo-compare.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index 54e6d40..686c1b4 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -79,6 +79,8 @@ typedef struct CompareState {
> * element type: Connection
> */
> GQueue conn_list;
> + /* compare lock */
> + QemuMutex compare_lock;
> /* hashtable to save connection */
> GHashTable *connection_track_table;
> /* compare thread, a thread for each NIC */
> @@ -619,7 +621,9 @@ static void compare_pri_rs_finalize(SocketReadState *pri_rs)
> compare_chr_send(&s->chr_out, pri_rs->buf, pri_rs->packet_len);
> } else {
> /* compare connection */
> + qemu_mutex_lock(&s->compare_lock);
> g_queue_foreach(&s->conn_list, colo_compare_connection, s);
> + qemu_mutex_unlock(&s->compare_lock);
> }
> }
>
> @@ -631,7 +635,9 @@ static void compare_sec_rs_finalize(SocketReadState *sec_rs)
> trace_colo_compare_main("secondary: unsupported packet in");
> } else {
> /* compare connection */
> + qemu_mutex_lock(&s->compare_lock);
> g_queue_foreach(&s->conn_list, colo_compare_connection, s);
> + qemu_mutex_unlock(&s->compare_lock);
> }
> }
>
> @@ -702,6 +708,7 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp)
> net_socket_rs_init(&s->sec_rs, compare_sec_rs_finalize);
>
> g_queue_init(&s->conn_list);
> + qemu_mutex_init(&s->compare_lock);
>
> s->connection_track_table = g_hash_table_new_full(connection_key_hash,
> connection_key_equal,
> @@ -771,6 +778,7 @@ static void colo_compare_finalize(Object *obj)
> g_queue_foreach(&s->conn_list, colo_flush_packets, s);
>
> g_queue_clear(&s->conn_list);
> + qemu_mutex_destroy(&s->compare_lock);
>
> g_hash_table_destroy(s->connection_track_table);
> g_free(s->pri_indev);
next prev parent reply other threads:[~2017-04-20 6:20 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-20 4:32 [Qemu-devel] [PATCH] COLO-compare: Add compare_lock aviod comparison conflict Zhang Chen
2017-04-20 6:20 ` Hailiang Zhang [this message]
2017-04-20 6:36 ` Zhang Chen
2017-04-20 6:40 ` Jason Wang
2017-04-25 11:57 ` Zhang Chen
2017-04-25 12:07 ` Hailiang Zhang
2017-04-25 12:20 ` Zhang Chen
2017-04-25 13:28 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=58F85316.3010509@huawei.com \
--to=zhang.zhanghailiang@huawei.com \
--cc=jasowang@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=xuquan8@huawei.com \
--cc=zhangchen.fnst@cn.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.