From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by sourceware.org (Postfix) with ESMTPS id 9C0E23858C20 for ; Fri, 2 Dec 2022 16:12:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9C0E23858C20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-ej1-x633.google.com with SMTP id bj12so12600055ejb.13 for ; Fri, 02 Dec 2022 08:12:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=9X8dVOKRv0wEX2s+v3eDt0PUZCaO8xCe2xeUHz+7iFQ=; b=IWyy7pNrD7D/Lz4Zvge+aQZhkjMSipQVuEwKyiOUEliMpzlNILcveCsSfTwtCDou2d P/D8QTGEJPvzDJqKlvx7dHsMKsTZ//L3g2l5C3TEck7BIMXwDHRaNPK8EmsrF1LvxT50 B9N4iBq2ET1fz31WYO+wdYtHl+Sm5EOSY7Jd5x+3TyBQywWcD53U3dOhDqe88HdrnCkx ouiATCn21QtMGVWSkWwNlMgMc0t4OKfJpKsdZHZ3wu/+D84W1WbCNPCo8+6PKOc/4uk3 91x4dIGjJS7jwFGHJ/7z/PEFysFhGPmjy1h/84xWtyk/yd13VUrd3el/y9xR25w+EdCG x4dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9X8dVOKRv0wEX2s+v3eDt0PUZCaO8xCe2xeUHz+7iFQ=; b=laso177T4TA38TY5vEAcXHPRG9R1jGChrT3mFnz924/J3vPHVX6tfrJPrWYf2rE2bu LJ5lLO3gwQQcSqVWoZhqAAR4eT9LhBSILhoGoG0pizCMVOUdyEYQwTFU2sv5fodH2pqz rFkSi6yUhb8cUvWfUEe9kcF1/bPHp31nl6OLZuVNLBr0zQWObU2sKZgBNE2O4LTkpZBd BYakX4Ax71nq7qVw1ZYysFKta9G+l+T49YxOHKRNFuS7IN1pReFQHfJvErM/cZvuv141 nYNSfJuDmfcnN+iDrWBEP820dDuC5VY+rR+f2P0PMsKlzJK2aEaoRmnHBGBWXn9ZJjH0 BDYA== X-Gm-Message-State: ANoB5pmqxSJwiyx1Dv3+0VkaxNL31Qh0s+aQYKGrufh5WrslZjiCj66k OgFwsrlqqHdQPMk9jt7odHmL2JyYChSbIH7X X-Google-Smtp-Source: AA0mqf5bTwf7KQTV14ILopYqX+HMAVAVCf9MTrkl7iCSw4dQaj9GE/xcJ/OHEDTtHSiYUFwevwwv5w== X-Received: by 2002:a17:906:d1c7:b0:7ad:fd3e:7762 with SMTP id bs7-20020a170906d1c700b007adfd3e7762mr46477653ejb.717.1669997572400; Fri, 02 Dec 2022 08:12:52 -0800 (PST) Received: from murgatroyd ([2620:20:4000:100::1000]) by smtp.gmail.com with ESMTPSA id vk2-20020a170907cbc200b007bf5250b515sm3188354ejc.29.2022.12.02.08.12.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Dec 2022 08:12:51 -0800 (PST) From: Tom Tromey To: Tom Tromey Cc: Hannes Domani , Hannes Domani via Gdb-patches Subject: Re: [PATCH] [RFC] Move SetConsoleCtrlHandler calls to async thread References: <20221128191526.1426-1-ssbssa.ref@yahoo.de> <20221128191526.1426-1-ssbssa@yahoo.de> <87edtjm3pm.fsf@tromey.com> <1754067492.12464828.1669921602659@mail.yahoo.com> <87zgc6lszn.fsf@tromey.com> X-Attribution: Tom Date: Fri, 02 Dec 2022 09:12:48 -0700 In-Reply-To: <87zgc6lszn.fsf@tromey.com> (Tom Tromey's message of "Thu, 01 Dec 2022 14:22:04 -0700") Message-ID: <87o7sllr7j.fsf@tromey.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Tom> Me neither. I'll see if I can try a different console tomorrow. I used powershell today. It seems to mostly work. I do see the ctrl-break exit when running with 'set new-console on'... but One weird thing is if I add logging (see appended hack), the problem goes away. That seems extra mysterious to me. Another problem I thought of is what should happen with these interrupt sequences when the user puts the inferior in the background, like with "continue &". Having them stop the inferior seems wrong, the user might be trying to interrupt some gdb command instead. I don't know how this area is supposed to work. Tom diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 3d6a3528914..d8e627621e5 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -462,6 +462,17 @@ windows_nat_target::process_thread_starter (LPVOID self) return 0; } +static BOOL +wrap_wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout) +{ + fprintf (stderr, "+++ installing ctrl_c_handler\n"); + SetConsoleCtrlHandler (&ctrl_c_handler, TRUE); + BOOL r = wait_for_debug_event (event, INFINITE); + fprintf (stderr, "+++ removing ctrl_c_handler\n"); + SetConsoleCtrlHandler (&ctrl_c_handler, FALSE); + return r; +} + void windows_nat_target::process_thread () { @@ -507,9 +518,7 @@ windows_nat_target::process_thread () immediately when the user tries to resume the execution in the inferior. This is a classic race that we should try to fix one day. */ - SetConsoleCtrlHandler (&ctrl_c_handler, TRUE); - wait_for_debug_event (&m_last_debug_event, INFINITE); - SetConsoleCtrlHandler (&ctrl_c_handler, FALSE); + wrap_wait_for_debug_event (&m_last_debug_event, INFINITE); m_debug_event_pending = true; } serial_event_set (m_wait_event); @@ -537,11 +546,7 @@ windows_nat_target::wait_for_debug_event_main_thread (DEBUG_EVENT *event) serial_event_clear (m_wait_event); } else - { - SetConsoleCtrlHandler (&ctrl_c_handler, TRUE); - wait_for_debug_event (event, INFINITE); - SetConsoleCtrlHandler (&ctrl_c_handler, FALSE); - } + wrap_wait_for_debug_event (event, INFINITE); return false; }); } @@ -1558,9 +1563,14 @@ ctrl_c_handler (DWORD event_type) { const int attach_flag = current_inferior ()->attach_flag; + fprintf (stderr, "+++ ctrl_c_handler, attach = %d\n", attach_flag); + /* Only handle Ctrl-C and Ctrl-Break events. Ignore others. */ if (event_type != CTRL_C_EVENT && event_type != CTRL_BREAK_EVENT) return FALSE; + fprintf (stderr, "+++ ctrl_c_handler, event type ok, new_console = %d, type = %s\n", + (int) new_console, + event_type == CTRL_C_EVENT ? "control-c" : "BREAK"); /* If the inferior and the debugger share the same console, do nothing as the inferior has also received the Ctrl-C event. */