From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ken Brown Newsgroups: gmane.emacs.devel Subject: Re: master 24d01af3dd: Cancel DND correctly during display disconnect on a different display Date: Thu, 26 May 2022 12:34:16 -0400 Message-ID: References: <165119574603.20331.4036366960372072878@vcs2.savannah.gnu.org> <20220429012907.00486C01683@vcs2.savannah.gnu.org> <2bd53fb7-8699-6a4c-cc65-4d7173341318@cornell.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22812"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 To: emacs-devel@gnu.org, Po Lu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu May 26 18:36:52 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nuGTi-0005hP-TN for ged-emacs-devel@m.gmane-mx.org; Thu, 26 May 2022 18:36:51 +0200 Original-Received: from localhost ([::1]:35548 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nuGTh-0004e2-UX for ged-emacs-devel@m.gmane-mx.org; Thu, 26 May 2022 12:36:49 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:43232) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nuGRN-0003jo-5s for emacs-devel@gnu.org; Thu, 26 May 2022 12:34:25 -0400 Original-Received: from mail-bn7nam10on2096.outbound.protection.outlook.com ([40.107.92.96]:53088 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nuGRJ-0000LZ-T2 for emacs-devel@gnu.org; Thu, 26 May 2022 12:34:24 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eHUfQQqVEOyeC+FwpOgmhUkYKDOtNtW6tHjntdd3Vyaa71SXmDRY3Dge31RWEXx0vtw2NxUrUl9fEB4i5mEhj9pr+HMyqySBomgM46/ba/jq9nKiORVQZuEHctpTQD+hfig/44/SqDqkKmpWGK/TaC8RgjemDNodA7J5In8E1J11OUjjVuV3ouq1kU1P5Y3Ia3lK5nf+Ps3trsFORk+OQu/l6T+9TIBqtJMNlhL81S4IRs1QNsbMRWECFXtvhRREt0H6L4t6L8/GOxq0lnu9EfHRzag1VL8qR+sO5QdektH7B0tkyCD4jE5/s2T6/ASIVMzY19rrgi22y6KmcUFEsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=SZyV9OBvpfUIy0Qi5X1iACij8FELYwoX7OlBg7FT6dg=; b=ejrE+ZP1jxnhl0gXi/BNvyT7ZYige+ZY2XiPQZ2e2xSbVAljFx1HPhuyZjN/8GI7Qb70VX3hqGy6DVedfauB5vTcwSYhiGqZQYgyXy2mIyqoIgJlYvdPYZStZOsbiYh0OzzlQwCvalRujH5u/s3Y1h4oBf6/RGD409TukHEatdrl1g/JY8huJHxqJDkOetanOgNZReKgMr9W58ZDNIFzwNS9VhI5O/uwTgfK7hvtzqNsXx94vKHeUMNl649ZzQQtUrTr7KdSUuBMk12RX+7yALKbL3nRR5B+ppSrCTfdD3nwI4ldWITWTxkzx58MbntpO8ZWwwThkxHH0W6LtyHxyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cornell.edu; dmarc=pass action=none header.from=cornell.edu; dkim=pass header.d=cornell.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cornell.edu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SZyV9OBvpfUIy0Qi5X1iACij8FELYwoX7OlBg7FT6dg=; b=ehVXYwsSJkxQ/4vaXVX7eLCrLQqVn065wEiF3BO4H6NIGYfw1EDYYE56lNTQgo0umNRO873R7fqQNnMkbvkBZ7xmJ7ThANe8d9rk+li7ZlTF62Sr/bXJA9jUpbaBe5ZWe/XVwyOg/mmdBp/IOpHBEJYxZk3Rngqad/lnjbl0RDw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=cornell.edu; Original-Received: from BN7PR04MB4388.namprd04.prod.outlook.com (2603:10b6:406:f8::19) by MWHPR04MB0465.namprd04.prod.outlook.com (2603:10b6:300:71::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13; Thu, 26 May 2022 16:34:18 +0000 Original-Received: from BN7PR04MB4388.namprd04.prod.outlook.com ([fe80::ed45:6a5d:b109:673e]) by BN7PR04MB4388.namprd04.prod.outlook.com ([fe80::ed45:6a5d:b109:673e%6]) with mapi id 15.20.5273.023; Thu, 26 May 2022 16:34:18 +0000 Content-Language: en-US In-Reply-To: <2bd53fb7-8699-6a4c-cc65-4d7173341318@cornell.edu> X-ClientProxiedBy: BL1PR13CA0362.namprd13.prod.outlook.com (2603:10b6:208:2c0::7) To BN7PR04MB4388.namprd04.prod.outlook.com (2603:10b6:406:f8::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8ad8dbcc-4528-44d4-1a5d-08da3f359456 X-MS-TrafficTypeDiagnostic: MWHPR04MB0465:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Fn9u7JkEOuoC34g3N6BOKmfHMGC4ZjevmBOgjRch5he4d/NL8PiUOKnOOpC9i1sgy78fze4hvf2gpzo3ItWPEc7ahqxiU/cU2+jBJNe0qzANSvpwmhdzCs1htGnT90axF12OH99KvLPDpI1E8NEk6dhRBrbaOHm+1h6pz5mR22eUErl2CyymKJ8CyGATGjHY53CVgyao9PAaVqUaXyXP0DLSi32zHMIvf50yDjaNpIwl83S6BI3ASQLtSv2TrpdSfBlUmjUsqJS1sJKGXZ+iRYDrzz3Mo06VxC0AGTZjuZxrYw222xgd8Cag/5omV6UQO6DF1zRaHTAqs+OVp1eIoRfAyNb+HiYnggZ1mJ9CnwvXbpnbgR7cBWBbcPrOJyen0QO35q5oJw7B0bRhfvkLOMTnYxwAmcyDNe4fbR+TOTbGPVpacGl08FmsEE1eKhCVQoRwZJY4cOQZbxg0CK+dnKNAz+N+QwZArWJlMJY/NB5VurxCDt6tuEcBVp1ttFJ8fMJpOcluURyxVP8dZ1rdGi2oCASdx1EgXHOX4GR341BK4JimWWTxOQduwpyuiOyIqriGcgB+19Scgo4x+6wGVoiv6v0Y/PXyZSCF7FPAObT6++nx3iJvXDJsHaoFrZwZWYfWqvqnzgLrAmUm7D8F1H4C9zI9LR/rdHHMGqHxGBezgdZtj+EZrbk3R99ajU7FsYmZdr0xCKp55aW+e94K3mEbVFiOJD5nPPG7tBcQPeo= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN7PR04MB4388.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(36756003)(31686004)(8676002)(6916009)(31696002)(186003)(6486002)(5660300002)(786003)(316002)(2906002)(8936002)(508600001)(83380400001)(86362001)(2616005)(38100700002)(53546011)(66476007)(66556008)(6506007)(66946007)(75432002)(6512007)(45980500001)(43740500002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?emx4WER1V2Y1SWUxcHF0Y0REeWtwQjZ6QWNPSno3bU5jcjljanVXcWNVUVVX?= =?utf-8?B?VjdEV2NHMWgrSzdYR1dwdDRHRVNjMmhwSVlWaWJORFRwb0dzWjQ4azFOb2Mr?= =?utf-8?B?K3dTTm9jbTlBNm1LUUdqYkdaSC9VYllJSW40RlIwWnpWbi8vVDZwcVhqQ25s?= =?utf-8?B?VkhvTm5qWnJlMVZTd1NQZEhSYkU3SVlGU3NLUGduWXVKcDFaM2dGOE9jTUdF?= =?utf-8?B?QmFxajduNzBiZ3A3U1JETFB5ZWUvaU1vaWloQmVKUEhBVFRpQWRnV0lJRWVL?= =?utf-8?B?ZGFhdmhyd0hEVGxDVnRqUWpYN2pELzk5cll4YnpGa3JlR2Y4U2g2QUVqZGNV?= =?utf-8?B?WEtGbjArakhsZ3d2UERmTHpIOFpDWHkxU1BQMENsZ25ITnh3aWpIVlZnNzdE?= =?utf-8?B?bkxLRmhHR3VTa1JoQ1lEemtrbUVicHMza0pVNnR3K3pBa3pVR1FHVkp0NTBu?= =?utf-8?B?dUtkamVzYVNSQVZ2dVJxU0FVNFNvbDJWOHM5T01zTDNlTktibExjanM4eU5v?= =?utf-8?B?M0VlU0I5aXNTMGRxODlDcDNDVUxuVVk1S2JOQi9GSkhIb2pMaTY4UHVZU2t3?= =?utf-8?B?L2RwNUJUN2ZHWGF0Sm1ycVpDNnQvamJpVm5MT0NERGZsRndwTWdUcmZPRjlQ?= =?utf-8?B?dWNrWHRnbksyY0ZCWG5mVE9TMTI4SEcwMVUySm X-MS-Exchange-AntiSpam-MessageData-1: rOj5tiKGr6W5mQ== X-OriginatorOrg: cornell.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 8ad8dbcc-4528-44d4-1a5d-08da3f359456 X-MS-Exchange-CrossTenant-AuthSource: BN7PR04MB4388.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2022 16:34:18.2083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5d7e4366-1b9b-45cf-8e79-b14b27df46e1 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gSz7OEP9rTGDwnct1YygEDLS6kxFltASSbC+dS0dlC9qvshYkkYKV2sMLNdnq0GyS9YGDqk1MIunRnquQgc+iA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR04MB0465 Received-SPF: pass client-ip=40.107.92.96; envelope-from=kbrown@cornell.edu; helo=NAM10-BN7-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:290284 Archived-At: On 5/26/2022 10:34 AM, Ken Brown wrote: > > > On 4/28/2022 9:29 PM, Po Lu via Mailing list for Emacs changes wrote: >> branch: master >> commit 24d01af3dde22ccd03b614d981129c6eacb0d56e >> Author: Po Lu >> Commit: Po Lu >> >>      Cancel DND correctly during display disconnect on a different display >>      * src/xterm.c (x_dnd_io_error_handler): New function. >>      (x_connection_closed): Send the messages to cancel DND if a >>      different display was disconnected. >> --- >>   src/xterm.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------- >>   1 file changed, 70 insertions(+), 8 deletions(-) >> >> diff --git a/src/xterm.c b/src/xterm.c >> index c4e0305a6e..35f6bc7fe8 100644 >> --- a/src/xterm.c >> +++ b/src/xterm.c >> @@ -1005,6 +1005,10 @@ static int x_dnd_movement_x, x_dnd_movement_y; >>   static unsigned int x_dnd_keyboard_state; >>   #endif >> +/* jmp_buf that gets us out of the IO error handler if an error occurs >> +   terminating DND as part of the display disconnect handler.  */ >> +static jmp_buf x_dnd_disconnect_handler; >> + >>   struct x_client_list_window >>   { >>     Window window; >> @@ -2571,8 +2575,17 @@ x_dnd_compute_toplevels (struct x_display_info *dpyinfo) >>     return 0; >>   } >> -#define X_DND_SUPPORTED_VERSION 5 >> +static _Noreturn int >> +x_dnd_io_error_handler (Display *display) >> +{ >> +#ifdef USE_GTK >> +  emacs_abort (); >> +#else >> +  longjmp (x_dnd_disconnect_handler, 1); >> +#endif >> +} >> +#define X_DND_SUPPORTED_VERSION 5 >>   static int x_dnd_get_window_proto (struct x_display_info *, Window); >>   static Window x_dnd_get_window_proxy (struct x_display_info *, Window); >> @@ -20027,6 +20040,9 @@ x_connection_closed (Display *dpy, const char >> *error_message, bool ioerror) >>     struct x_display_info *dpyinfo = x_display_info_for_display (dpy); >>     Lisp_Object frame, tail; >>     specpdl_ref idx = SPECPDL_INDEX (); >> +  void *io_error_handler; >> +  xm_drop_start_message dmsg; >> +  struct frame *f; >>     error_msg = alloca (strlen (error_message) + 1); >>     strcpy (error_msg, error_message); >> @@ -20034,16 +20050,61 @@ x_connection_closed (Display *dpy, const char >> *error_message, bool ioerror) >>     /* Inhibit redisplay while frames are being deleted. */ >>     specbind (Qinhibit_redisplay, Qt); >> -  /* If drag-and-drop is in progress and the DND frame's display is >> -     DPY, cancel drag-and-drop.  Don't reset event masks or try to >> -     send responses to other programs because the display is going >> +  /* If drag-and-drop is in progress, cancel drag-and-drop.  If DND >> +     frame's display is DPY, don't reset event masks or try to send >> +     responses to other programs because the display is going >>        away.  */ >> -  if ((x_dnd_in_progress || x_dnd_waiting_for_finish) >> -      && dpy == (x_dnd_waiting_for_finish >> -         ? x_dnd_finish_display >> -         : FRAME_X_DISPLAY (x_dnd_frame))) >> +  if (x_dnd_in_progress || x_dnd_waiting_for_finish) >>       { >> +      /* Handle display disconnect errors here because this function >> +     is not reentrant at this particular spot.  */ >> +      io_error_handler = XSetIOErrorHandler (x_dnd_io_error_handler); >> + >> +      if (!sigsetjmp (x_dnd_disconnect_handler, 1) >> +      && x_dnd_in_progress >> +      && dpy != (x_dnd_waiting_for_finish >> +             ? x_dnd_finish_display >> +             : FRAME_X_DISPLAY (x_dnd_frame))) >> +    { >> +      /* Clean up drag and drop if the drag frame's display isn't >> +         the one being disconnected.  */ >> +      f = x_dnd_frame; >> + >> +      if (x_dnd_last_seen_window != None >> +          && x_dnd_last_protocol_version != -1) >> +        x_dnd_send_leave (x_dnd_frame, >> +                  x_dnd_last_seen_window); >> +      else if (x_dnd_last_seen_window != None >> +           && !XM_DRAG_STYLE_IS_DROP_ONLY (x_dnd_last_motif_style) >> +           && x_dnd_last_motif_style != XM_DRAG_STYLE_NONE >> +           && x_dnd_motif_setup_p) >> +        { >> +          dmsg.reason = XM_DRAG_REASON (XM_DRAG_ORIGINATOR_INITIATOR, >> +                        XM_DRAG_REASON_DROP_START); >> +          dmsg.byte_order = XM_BYTE_ORDER_CUR_FIRST; >> +          dmsg.timestamp = FRAME_DISPLAY_INFO (f)->last_user_time; >> +          dmsg.side_effects >> +        = XM_DRAG_SIDE_EFFECT (xm_side_effect_from_action (FRAME_DISPLAY_INFO >> (f), >> +                                   x_dnd_wanted_action), >> +                       XM_DROP_SITE_VALID, >> +                       xm_side_effect_from_action (FRAME_DISPLAY_INFO (f), >> +                                   x_dnd_wanted_action), >> +                       XM_DROP_ACTION_DROP_CANCEL); >> +          dmsg.x = 0; >> +          dmsg.y = 0; >> +          dmsg.index_atom = FRAME_DISPLAY_INFO (f)->Xatom_XdndSelection; >> +          dmsg.source_window = FRAME_X_WINDOW (f); >> + >> +          x_dnd_send_xm_leave_for_drop (FRAME_DISPLAY_INFO (f), f, >> +                        x_dnd_last_seen_window, 0); >> +          xm_send_drop_message (FRAME_DISPLAY_INFO (f), FRAME_X_WINDOW (f), >> +                    x_dnd_last_seen_window, &dmsg); >> +        } >> +    } >> + >> +      XSetIOErrorHandler (io_error_handler); >> + >>         x_dnd_last_seen_window = None; >>         x_dnd_last_seen_toplevel = None; >>         x_dnd_in_progress = false; >> @@ -20234,6 +20295,7 @@ x_io_error_quitter (Display *display) >>           DisplayString (display)); >>     x_connection_closed (display, buf, true); >>   } >> + >>   >>   /* Changing the font of the frame.  */ >> > > After this commit I'm getting the following warning on 64-bit Cygwin: > > ../../master/src/xterm.c:20064:12: warning: initialization of ‘long int (*)[34]’ > from incompatible pointer type ‘long int (*)[32]’ [-Wincompatible-pointer-types] > 20064 |       if (!sigsetjmp (x_dnd_disconnect_handler, 1) >       |            ^~~~~~~~~ > > A second such warning appeared after commit cc297af: > > ../../master/src/xterm.c: In function ‘xm_get_drag_window’: > ../../master/src/xterm.c:1447:11: warning: initialization of ‘long int (*)[34]’ > from incompatible pointer type ‘long int (*)[32]’ [-Wincompatible-pointer-types] >  1447 |       if (sigsetjmp (x_dnd_disconnect_handler, 1)) >       |           ^~~~~~~~~ > > > With current git HEAD, the line numbers of the sigsetjmp calls are 1664 and 21315. The problem seems to be that x_dnd_disconnect_handler is of type jmp_buf instead of sigjmp_buf. But we can't simply change the type, because x_dnd_disconnect_handler is also used in a call to longjmp, which expects an argument of type jmp_buf. Ken