From patchwork Fri Jan 12 11:30:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 859783 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VBvrbgsz"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zJ0zk17zXz9t3B for ; Fri, 12 Jan 2018 22:35:30 +1100 (AEDT) Received: from localhost ([::1]:35197 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZxcO-0001k8-5T for incoming@patchwork.ozlabs.org; Fri, 12 Jan 2018 06:35:28 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41471) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZxYY-0007Bo-AK for qemu-devel@nongnu.org; Fri, 12 Jan 2018 06:31:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eZxYX-0004T5-Cg for qemu-devel@nongnu.org; Fri, 12 Jan 2018 06:31:30 -0500 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:34094) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eZxYX-0004Qx-6X for qemu-devel@nongnu.org; Fri, 12 Jan 2018 06:31:29 -0500 Received: by mail-wm0-x242.google.com with SMTP id 81so1969289wmb.1 for ; Fri, 12 Jan 2018 03:31:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=XG1iRGuONMkY3+sT4JC6ibJ6XHtgTrqDRFZGOQkLmI0=; b=VBvrbgszzQ5oQZq7EKnfc26h78bKJyZf7kcohFhifgf2MWEzfy5wS997K9vh14PX3L t6u5z5f7Yb8or0fIcZ5Or+vZw88Zze7RyVx7wZyuaeULCqNzmFjC4i3mWx/8bJpQyGzR slZ8d/QtRc9ZNwhrThvouymstBN7oF8ExFwGgrUNEmSMt2d1grk47j+zY17cKOGJpnLN kBI5QKSKAG/4Q7YgsBlN6ogRp/1I+AURFnS4qovtI6Wb7KWV9OjbWpY4+zkMX+5DH9Fm 5Dg6Z0qvC7ZuoyMDQgwMSv2H5UVfGt7s2J5HVy/eYLQxlwznju8whl3ceLL54pyS5U0v oPBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=XG1iRGuONMkY3+sT4JC6ibJ6XHtgTrqDRFZGOQkLmI0=; b=Tc0HqDiI4LS6yo84uj89F4r2zb51qPqExJKt+oZbXOfoicxiXzDIkbtvS/KHZPPzsu 3kcUJp7+dcT/XfychkiuzEp6UydVKEAjqm4i/xvmTlbBtFyrkWpnHXzLD4vQ9QitS4/r aMyub0GJqtmIkPVsCCfS2kiLSpd89Qtxp5OEWFuK1vD6rGjilDtV9gtvm914YfFU8dby vaYkLkNHCD3p/t44BnoTTowx395G/HjWAxkkU73VglAg4j8495FPVj31UipJZ1bYy0IO 329O62VVVFhdaJNiHWXwHE7xR7fnUBfRUuFTcdW2+VHqIY3wjgD6hsXuGuTliALDFFQS r1KQ== X-Gm-Message-State: AKwxytf9Wm0Ovd9lXCOBl5+QYRqUpNdZG8QEGOOlX/vAHgE/IFLEWCE7 n2Oi0F+gtPfssX93J3f4U8FShojE X-Google-Smtp-Source: ACJfBoukL0T4M/ae+YBb1Or9FI1P/8imXKO0QuGey6fK2ghrfbOX2S0dzUR8gazgPlT9d+qo/HvBFg== X-Received: by 10.28.249.12 with SMTP id x12mr3387807wmh.122.1515756687893; Fri, 12 Jan 2018 03:31:27 -0800 (PST) Received: from 640k.lan (dynamic-adsl-78-12-229-84.clienti.tiscali.it. [78.12.229.84]) by smtp.gmail.com with ESMTPSA id l8sm2732271wmg.46.2018.01.12.03.31.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Jan 2018 03:31:27 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 12 Jan 2018 12:30:31 +0100 Message-Id: <1515756676-3860-8-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1515756676-3860-1-git-send-email-pbonzini@redhat.com> References: <1515756676-3860-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::242 Subject: [Qemu-devel] [PULL 07/52] chardev: let g_idle_add() be with chardev gcontext X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Xu Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Peter Xu The idle task will be attached to main gcontext even if the chardev backend is running in another gcontext. Fix the only caller by extending the g_idle_add() logic into the more powerful g_source_attach(). It's basically g_idle_add_full() implementation, but with the chardev's gcontext passed in. Signed-off-by: Peter Xu Message-Id: <20180104141835.17987-3-peterx@redhat.com> Signed-off-by: Paolo Bonzini --- chardev/char-pty.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/chardev/char-pty.c b/chardev/char-pty.c index 761ae6d..8248e36 100644 --- a/chardev/char-pty.c +++ b/chardev/char-pty.c @@ -43,7 +43,7 @@ typedef struct { /* Protected by the Chardev chr_write_lock. */ int connected; guint timer_tag; - guint open_tag; + GSource *open_source; } PtyChardev; #define PTY_CHARDEV(obj) OBJECT_CHECK(PtyChardev, (obj), TYPE_CHARDEV_PTY) @@ -58,7 +58,7 @@ static gboolean pty_chr_timer(gpointer opaque) qemu_mutex_lock(&chr->chr_write_lock); s->timer_tag = 0; - s->open_tag = 0; + s->open_source = NULL; if (!s->connected) { /* Next poll ... */ pty_chr_update_read_handler_locked(chr); @@ -183,7 +183,7 @@ static gboolean qemu_chr_be_generic_open_func(gpointer opaque) Chardev *chr = CHARDEV(opaque); PtyChardev *s = PTY_CHARDEV(opaque); - s->open_tag = 0; + s->open_source = NULL; qemu_chr_be_event(chr, CHR_EVENT_OPENED); return FALSE; } @@ -194,9 +194,10 @@ static void pty_chr_state(Chardev *chr, int connected) PtyChardev *s = PTY_CHARDEV(chr); if (!connected) { - if (s->open_tag) { - g_source_remove(s->open_tag); - s->open_tag = 0; + if (s->open_source) { + g_source_destroy(s->open_source); + g_source_unref(s->open_source); + s->open_source = NULL; } remove_fd_in_watch(chr); s->connected = 0; @@ -210,9 +211,13 @@ static void pty_chr_state(Chardev *chr, int connected) s->timer_tag = 0; } if (!s->connected) { - g_assert(s->open_tag == 0); + g_assert(s->open_source == NULL); + s->open_source = g_idle_source_new(); s->connected = 1; - s->open_tag = g_idle_add(qemu_chr_be_generic_open_func, chr); + g_source_set_callback(s->open_source, + qemu_chr_be_generic_open_func, + chr, NULL); + g_source_attach(s->open_source, chr->gcontext); } if (!chr->gsource) { chr->gsource = io_add_watch_poll(chr, s->ioc,