From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11021075.outbound.protection.outlook.com [52.101.65.75]) by lore.virtuozzo.com (Postfix) with ESMTPS id B7DC4802A7 for ; Fri, 2 Oct 2026 16:49:05 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XvbkptDlimGM0bpYhdC1Cd3bGso1lmn9kylOF2fbNOjxWErY0uKmyuP1+BPtOuxA61PG8FZhPSyu70n9J18frhtQs+RaIO/IgtxZCvirT91searx7bp3jj70Bf4yHz4G6ZdpV3dV0oMh7oLRSc6NxdahMQNAaqjHj/seY9SJ/p9MPpFDK3b7Cocrrnk+lqKSo3bN99eYkOXQ/cv3s8XOqsrEZev7VSqSp69zF4shI/06F4KgnX7GUgIFhc2311elWhQ3xjaW0s5RRcMQRScLTvb3RdxQXsxC4YpNQ5uwUv/HQl5yyeXVZ4E6jCue/Xp3B+u6MiQcCekZ0L9b9WMdVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nVWFVjJ29Zme5pOo4EhgoJlKzP71PXNUAhAK1xvSH14=; b=U5ABvnir8Lph3SbcZvz3Ma5vPrRxk1m++EnuNuuRNxB2oc1YwUbAvWyc0KxhcrJu7hjCfkOryrJGQr00jTgvA8KsawVS+wE5/UI4abYy7jjrgKf65jeUP+oTeIv7Cd5EdFRk2CTZMWFiPSKjglz/qUXd1aepjYu30QteftrUmDhaQqI+6RcAuhQ3ywWutkE42WvvO5uALexkPjt3H4/QO/XDo2HfrHufPV8zSUweSzjk5vhqU/NxihpwtomxhhFGS36AflQZXtRap6gbAASVgCwykA3rwOYvvlCuvUPbIjMUTg43DTSaxbI1VzX11TgWI3Tu/LctdBE6Hd6hgxACYg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 2a00:1450:4864:20::429) smtp.rcpttodomain=virtuozzo.com smtp.mailfrom=openvz.org; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=openvz.org; dkim=pass (signature was verified) header.d=openvz.org; arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.onmicrosoft.com; s=selector2-virtuozzo-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nVWFVjJ29Zme5pOo4EhgoJlKzP71PXNUAhAK1xvSH14=; b=Mfj/8IYv1IVMowoR4DgBgn8O2/qKVoZVdSmeJf/ETr6H5ALh07KQ89dil68JIYrYeC2gE2JJGkdgga8jWOKXxo6CKTqZv2+E3xq++a7s6thyPMaK5/VwA0T8ILG7yABQ72CevDOd6Vb9pMz0ujAvsa/jQxnLxASCv/5TwTll14U= Received: from AS4P251CA0003.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:5d2::9) by AS4PR08MB7432.eurprd08.prod.outlook.com (2603:10a6:20b:4e4::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.472.18; Fri, 2 Oct 2026 16:48:59 +0000 Received: from AMS0EPF00000567.eurprd02.prod.outlook.com (2603:10a6:20b:5d2:cafe::97) by AS4P251CA0003.outlook.office365.com (2603:10a6:20b:5d2::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.472.19 via Frontend Transport; Fri, 2 Oct 2026 16:48:59 +0000 Authentication-Results: mx.microsoft.com 1; spf=pass (sender IP is 2a00:1450:4864:20::429) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org; Received-SPF: Pass (protection.outlook.com: domain of openvz.org designates 2a00:1450:4864:20::429 as permitted sender) receiver=protection.outlook.com; client-ip=2a00:1450:4864:20::429; helo=mail-wr1-x429.google.com; pr=C Received: from mail-wr1-x429.google.com (2a00:1450:4864:20::429) by AMS0EPF00000567.mail.protection.outlook.com (2603:10a6:20f:fff8::235) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.472.14 via Frontend Transport; Fri, 2 Oct 2026 16:48:58 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-48b03f23305so613669f8f.1 for ; Fri, 02 Oct 2026 09:48:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1790959738; x=1791564538; darn=virtuozzo.com; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nVWFVjJ29Zme5pOo4EhgoJlKzP71PXNUAhAK1xvSH14=; b=rRUohojN7honsFJMlAXMfMLQJ29vljn9jSKo4PG/09tQudEEiOA1ngZ6fIdkn0Z4TF 1uCEiw8avKmkUwqWfyX19A6SodzHkfJCC6hx4F5V2VMecI7wPLRdJ+E/jx1aEHlIoJ02 4REYmi6nmsFfcGIkxUyOzQFeYAAWhds7rqbGtaGfycjfGLXKSczs/OlTX9qstP7vcFuA u0N/XDNw5gnb+fuLVPxGeW8Bz9X9iHCdYmqkQ4o+r4bqLqWfp/HBZlbEF8BhaFjBhoX2 0xWb4ZZltZdKiBE6Y8tzwec6GarZXcerE95ZYwrVNxFAziwtQqep4upeELpi8jewYuUX 6A9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790959738; x=1791564538; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=nVWFVjJ29Zme5pOo4EhgoJlKzP71PXNUAhAK1xvSH14=; b=ZH4+RaBMbLBktxL6LELHcArT4L2Qhd4Rkkcs84cFzTeQRUOesVYWlE9HRvoGuqb65E jOsd6bf4Y3U09gRnzbBOfFPRZYWMuwaql2C6/1NHs7+k7MjgwoqobdJGF1aaDaN2UuAL 1LQZRBxTLQ6jAd2vATgarUI/oOjTFKgQsn1CKmkFBk2DHUoHy3kzZcCoh93biAT7GJwu oP2qnzzV/8UYdNRsrYm91dNqHujbJtkGk2UOll/6fvESVevV+2/E5LdfV8vWzB7jS6JA aDRRnBEx3AlJq/mtyEY2ThyNveElGBDdx8aD/MhUsJdw1NeMiqw+r2guVeoBRrLpYxEf islg== X-Gm-Message-State: AFq9FYJd6w+c/3+KYZx31DFqCBr8vDsOTDPoNalLVZi/ihQE7XJ6cyf5 U5TXqmsBZnvSaChBTcbvntWPXlJkqiG0GtWCmsbD5euoMOs1OJ3LR8tFiPI/OKXdMQr+TlTZwK6 JTarkoN4= X-Gm-Gg: AYBFou3vd7ajcym8THEof6xxzWk7SQusiF2qTV0Xc6FuxQCPxCfALlAu+fvyg9/fiie sNNsa5fwXSua4X2MV4qg3DH3ifiFj6v+7hXskh6AEpnaVnhIiAn29ef5PfD93hv7MCDrwafQJgb CgtSSCyRUDv+X0woJLsk/KK3OyBL7nCVPhrFBFsWi34X0oDdcABxp6NgEUAsOdZPOD0GjPzoamp rbI8XODk1HEaYpSzO/vX4LM+avdKp+oUOXhiSpOZnre9vgedMpZSfuKlF4Y5YZKcFqKn/XqMu/F LTxJGbSpDNT7S74tNPNDDSai+atXZWRUezyiJyRRLMCpGKIodkzBVuZ9+EZ7dz9NypqCWvHoDtL JVoAeIHDf8FwPbw2hr0gcC+wbHWZxJ+u7fcUFrrAtf2cUrMdxSpeV5chyei2oGJ7fP+mCEmHwGM nNXIeELhTMjYvMJ6PJBbKanwDYj7YH8ygCp5+hzEW1GIv1PJ1G85HdLJ8rCgqWiALHFw== X-Received: by 2002:a05:6000:40cb:b0:48c:45ed:2425 with SMTP id ffacd0b85a97d-48c47c8ed6cmr21475f8f.4.1790959738070; Fri, 02 Oct 2026 09:48:58 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:e2e:474b:392b:33f7]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48b380fada5sm6442174f8f.24.2026.10.02.09.48.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Oct 2026 09:48:57 -0700 (PDT) From: "Denis V. Lunev" To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@virtuozzo.com Subject: [PATCH 1/3] chardev: implement cpr_claim_fds() in the base class #VSTOR-148304 Date: Fri, 2 Oct 2026 18:48:51 +0200 Message-ID: <20261002164853.2130337-2-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261002164853.2130337-1-den@openvz.org> References: <20261002164853.2130337-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF00000567:EE_|AS4PR08MB7432:EE_ X-MS-Office365-Filtering-Correlation-Id: 234ad3f0-6336-4762-26b3-08df20a50e12 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 0 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|43022699015|376014|61400799027|9140799003|6059299003|48200799018|82310400026|16102099003|22082099003|55112099003|18002099003|10067099003|56012099006|5063699009; X-Microsoft-Antispam-Message-Info: PtpgbVJvuCIHC8IJiwaGzWHutVlxOKZZAUNpv3rgv4aj5a6UIycZoH138DdCllf1Mw0swxawRYb68IP7jSucNlmIzzPb434NUSLyv6J/g21b460hiAfQTeOPDs5qrPFrZQuBrxax2JK4usO1dk+Am0qA7Djk0T4vcp0chb2jGDX/dGyxdKhvZKa9SJlGQrbriyzuWAVfXtjYKIGxFU251hZtbLAJ+hYpgKoC5QH9/qSVcjEhIb0C83iR1+5RCu00U0OrAY/tyP3yp5T9ffPDZj5zn2sjcTLfRZ/GkUiaxCOFsqt90v4XqFCHH/2RzKNunZfYE1nzyF+ECECcZyKgdephzDewzoDt+lE354xMVrqOgpigHNrZ4ykk2aiofzl7zUkpJflyF35GeUFzhdxNhJqMwQQfr8hbkK2NoPtPB9RYVdqA0sHuGdGfanMCK7KdIUVzsKglsppyrPAyEx/5G/rUBKXQKNTjfLTaWv6k0axkSkENHWYP4n97CgmClrr7N+czJQQsEGi844eHCH64CoDZt8/nB9PnwWPg4UbBXa43n9tuZIyxYvBAwfuqQFW1e4HecS1Np1+4rrltbfhD3LRkL9G5dW/rbFwD+2dRwMToc/pw8M2iyBq2tZi1s7TdNp8ThONYraNtSPwd3A2S2dWedcT9DTiZxacBElAUvYozY2KHhOwxcCdhcQosExiYu1vW7USB4R//U6YttGtzI8/0U+R0wUtbsPB4h9tFbBDLE1BlCtaxG1D1ZInJm0PKBHx0GZPOmjHs8N+UIHTr675xGtVDtbcTSeB4tgxQMP7mDlVeMudgycnhJDWYu1h1TdDwxYcVeaCSN38jkscJEfUWmHgFjQ1B8v7fYdOfczum/orai11p5MCOOf/XL/V2JmeoYwZguhxCT7qWxF5GMtiCbetZPHstv+Qj5gM1szjkgo1g+qMXJHa5KkM3hYpJ X-Forefront-Antispam-Report: CIP:2a00:1450:4864:20::429;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wr1-x429.google.com;PTR:mail-wr1-x429.google.com;CAT:NONE;SFS:(13230040)(43022699015)(376014)(61400799027)(9140799003)(6059299003)(48200799018)(82310400026)(16102099003)(22082099003)(55112099003)(18002099003)(10067099003)(56012099006)(5063699009);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZKhFhusFf0sSHO0z0h9bS1K8YRrrii0ocowow3A8sR0O3TkjzFP9B3xMAoupGBTyFa2g6PCMxFVzXR+JZLCWEszycwdeHnLX7xuGXEhaUiiYRFEd9HA1MAtK0pJiFT1Jo3pSDUUUL3aAsu8IryoF6WMy8NZKTvYRar1PbMESDItmw636fFMLaGg5DfVjRbUQ76/6CoMBlle9B4CdILrcOhELb15RG/qNoU7gSCJlIKigG+iQwwwl06onM6x6IIgWEdhDBF93ZQ84yvVcgyjmsEvdILSXFwZDnwaywsgQXYGSuwX90ezffRS+EquDkJQPHz9CrueijO9e6sli2yS+OYOjHemSp/RPtt8DbIeE3TPS0P+FmPFxjMVR+b1RzSzbiZRs3F5vPoo0BAU2JUFuEG5Am3bGBY/c69lk/0sQ6s7IbeaIDhvWncQBqY6ieVA3 X-ExternalRecipientOutboundConnectors: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2026 16:48:58.7076 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 234ad3f0-6336-4762-26b3-08df20a50e12 X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF00000567.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB7432 List-Id: From: Denis V. Lunev Give TYPE_CHARDEV an empty cpr_claim_fds() and make the file, pty and socket backends chain to their parent's. Every chardev class then has the hook, so qmp_chardev_change() calls it without a NULL check, and state owned by the base class can be re-claimed there as well. No functional change. Signed-off-by: Denis V. Lunev --- chardev/char-file.c | 3 +++ chardev/char-pty.c | 3 +++ chardev/char-socket.c | 3 +++ chardev/char.c | 13 +++++++------ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/chardev/char-file.c b/chardev/char-file.c index a90f4a77e13..89011f52e3e 100644 --- a/chardev/char-file.c +++ b/chardev/char-file.c @@ -124,7 +124,10 @@ out_close: static void char_file_cpr_claim_fds(Chardev *chr) { FDChardev *s = FD_CHARDEV(chr); + ChardevClass *pc = CHARDEV_CLASS( + object_class_get_parent(object_class_by_name(TYPE_CHARDEV_FILE))); + pc->cpr_claim_fds(chr); if (s->ioc_out) { cpr_delete_fd(chr->label, 0); cpr_save_fd(chr->label, 0, QIO_CHANNEL_FILE(s->ioc_out)->fd); diff --git a/chardev/char-pty.c b/chardev/char-pty.c index a0090e4c3d1..8058da92bb4 100644 --- a/chardev/char-pty.c +++ b/chardev/char-pty.c @@ -403,7 +403,10 @@ static void char_pty_open(Chardev *chr, static void char_pty_cpr_claim_fds(Chardev *chr) { PtyChardev *s = PTY_CHARDEV(chr); + ChardevClass *pc = CHARDEV_CLASS( + object_class_get_parent(object_class_by_name(TYPE_CHARDEV_PTY))); + pc->cpr_claim_fds(chr); if (s->ioc) { cpr_delete_fd(chr->label, 0); cpr_save_fd(chr->label, 0, QIO_CHANNEL_FILE(s->ioc)->fd); diff --git a/chardev/char-socket.c b/chardev/char-socket.c index d20aea764f9..c73a3dd0f7a 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1681,7 +1681,10 @@ char_socket_get_connected(Object *obj, Error **errp) static void char_socket_cpr_claim_fds(Chardev *chr) { SocketChardev *s = SOCKET_CHARDEV(chr); + ChardevClass *pc = CHARDEV_CLASS( + object_class_get_parent(object_class_by_name(TYPE_CHARDEV_SOCKET))); + pc->cpr_claim_fds(chr); if (s->sioc) { cpr_delete_fd(chr->label, CPR_CONNSOCK_ID); cpr_save_fd(chr->label, CPR_CONNSOCK_ID, s->sioc->fd); diff --git a/chardev/char.c b/chardev/char.c index 87f40d0137e..b64767f574e 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -295,12 +295,17 @@ static int null_chr_write(Chardev *chr, const uint8_t *buf, int len) return len; } +static void char_cpr_claim_fds(Chardev *chr) +{ +} + static void char_class_init(ObjectClass *oc, const void *data) { ChardevClass *cc = CHARDEV_CLASS(oc); cc->chr_write = null_chr_write; cc->chr_be_event = chr_be_event; + cc->cpr_claim_fds = char_cpr_claim_fds; } static void char_finalize(Object *obj) @@ -1164,9 +1169,7 @@ ChardevReturn *qmp_chardev_change(const char *id, ChardevBackend *backend, backend, chr->gcontext, handover_yank_instance, errp); if (!chr_new) { /* the failed replacement's open() may have displaced our cpr fds */ - if (cc->cpr_claim_fds) { - cc->cpr_claim_fds(chr); - } + cc->cpr_claim_fds(chr); return NULL; } @@ -1186,9 +1189,7 @@ ChardevReturn *qmp_chardev_change(const char *id, ChardevBackend *backend, qemu_chr_be_event(chr, CHR_EVENT_OPENED); } /* chr_new's open() may have displaced our cpr fds; re-claim them */ - if (cc->cpr_claim_fds) { - cc->cpr_claim_fds(chr); - } + cc->cpr_claim_fds(chr); object_unref(OBJECT(chr_new)); return NULL; } -- 2.53.0