Public bug reported: Binary package hint: xorg
Problem occurred with Ubuntu 10.4 Package xserver-xorg-core 2:1.7.6-2ubuntu7.2 mwm has a stuck grab when handling Alt-button key-press causing the mwm to freeze. I reported the problem to [email protected]. It was confirmed as a problem and a patch was generated. Can this patch be applied to this package? Please refer to the mailing list for details. The patch is attached below. =============================================================================== Date: Fri, 25 Jun 2010 09:48:10 +1000 From: Peter Hutterer <[email protected]> To: "X.Org Devel List" <[email protected]> Cc: "Peter A. Buhr" <[email protected]>, Keith Packard <[email protected]>, Daniel Stone <[email protected]> Subject: [PATCH] Revert "dix: use the event mask of the grab for TryClientEvents." Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Behaviour of earlier X servers was to deliver the ButtonPress event unconditionally, regardless of the actual event mask being set. Thus, a GrabButton event will always deliver the button press event, a GrabKey always the key press event, etc. Same goes for XI and XI2. Reproducible with a simple client requesting a button grab in the form of: XGrabButton(dpy, AnyButton, AnyModifier, win, True, ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None); On servers before MPX/XI2, the client will receive a button press and release event. On current servers, the client receives only the release. Clients that expect the press event to be delivered unconditionally may leave the user with a stuck grab. XTS test results for XGrabButton are identical with and without this patch. This reverts commit 48585bd1e3e98db0f3df1ecc68022510216e00cc. Conflicts: dix/events.c Signed-off-by: Peter Hutterer <[email protected]> --- dix/events.c | 52 ++-------------------------------------------------- 1 files changed, 2 insertions(+), 50 deletions(-) diff --git a/dix/events.c b/dix/events.c index ae9847c..e1c3d0a 100644 --- a/dix/events.c +++ b/dix/events.c @@ -3420,7 +3420,6 @@ CheckPassiveGrabsOnWindow( { DeviceIntPtr gdev; XkbSrvInfoPtr xkbi = NULL; - Mask mask = 0; gdev= grab->modifierDevice; if (grab->grabtype == GRABTYPE_CORE) @@ -3535,9 +3534,6 @@ CheckPassiveGrabsOnWindow( } xE = &core; count = 1; - mask = grab->eventMask; - if (grab->ownerEvents) - mask |= pWin->eventMask; } else if (match & XI2_MATCH) { rc = EventToXI2((InternalEvent*)event, &xE); @@ -3549,34 +3545,6 @@ CheckPassiveGrabsOnWindow( continue; } count = 1; - - /* FIXME: EventToXI2 returns NULL for enter events, so - * dereferencing the event is bad. Internal event types are - * aligned with core events, so the else clause is valid. - * long-term we should use internal events for enter/focus - * as well */ - if (xE) - mask = grab->xi2mask[device->id][((xGenericEvent*)xE)->evtype/8]; - else if (event->type == XI_Enter || event->type == XI_FocusIn) - mask = grab->xi2mask[device->id][event->type/8]; - - if (grab->ownerEvents && wOtherInputMasks(grab->window)) - { - InputClientsPtr icp = - wOtherInputMasks(grab->window)->inputClients; - - while(icp) - { - if (rClient(icp) == rClient(grab)) - { - int evtype = (xE) ? ((xGenericEvent*)xE)->evtype : event->type; - mask |= icp->xi2mask[device->id][evtype/8]; - break; - } - - icp = icp->next; - } - } } else { rc = EventToXI((InternalEvent*)event, &xE, &count); @@ -3587,23 +3555,6 @@ CheckPassiveGrabsOnWindow( "(%d, %d).\n", device->name, event->type, rc); continue; } - mask = grab->eventMask; - if (grab->ownerEvents && wOtherInputMasks(grab->window)) - { - InputClientsPtr icp = - wOtherInputMasks(grab->window)->inputClients; - - while(icp) - { - if (rClient(icp) == rClient(grab)) - { - mask |= icp->mask[device->id]; - break; - } - - icp = icp->next; - } - } } (*grabinfo->ActivateGrab)(device, grab, currentTime, TRUE); @@ -3612,7 +3563,8 @@ CheckPassiveGrabsOnWindow( { FixUpEventFromWindow(device, xE, grab->window, None, TRUE); - TryClientEvents(rClient(grab), device, xE, count, mask, + TryClientEvents(rClient(grab), device, xE, count, + GetEventFilter(device, xE), GetEventFilter(device, xE), grab); } -- 1.7.1 ProblemType: Bug DistroRelease: Ubuntu 10.04 Package: xorg 1:7.5+5ubuntu1 ProcVersionSignature: Ubuntu 2.6.32-22.36-generic 2.6.32.11+drm33.2 Uname: Linux 2.6.32-22-generic i686 Architecture: i386 Date: Mon Jun 28 16:15:15 2010 DkmsStatus: Error: [Errno 2] No such file or directory InstallationMedia: Ubuntu 10.04 "Lucid Lynx" - Beta i386 (20100317.1) MachineType: LENOVO 200793U PccardctlIdent: Socket 0: no product info available PccardctlStatus: Socket 0: no card ProcCmdLine: BOOT_IMAGE=/boot/vmlinuz-2.6.32-22-generic root=UUID=f5b377fb-90cf-4601-b325-07416c8ae837 ro quiet splash nomodeset ProcEnviron: LANGUAGE=en_CA:en PATH=(custom, user) LANG=en_CA.UTF-8 SHELL=/bin/tcsh SourcePackage: xorg Symptom: display Title: Xorg freeze dmi.bios.date: 11/24/2006 dmi.bios.vendor: LENOVO dmi.bios.version: 79ETC7WW (2.07 ) dmi.board.name: 200793U dmi.board.vendor: LENOVO dmi.board.version: Not Available dmi.chassis.asset.tag: No Asset Information dmi.chassis.type: 10 dmi.chassis.vendor: LENOVO dmi.chassis.version: Not Available dmi.modalias: dmi:bvnLENOVO:bvr79ETC7WW(2.07):bd11/24/2006:svnLENOVO:pn200793U:pvrThinkPadT60p:rvnLENOVO:rn200793U:rvrNotAvailable:cvnLENOVO:ct10:cvrNotAvailable: dmi.product.name: 200793U dmi.product.version: ThinkPad T60p dmi.sys.vendor: LENOVO glxinfo: Error: [Errno 2] No such file or directory system: distro: Ubuntu codename: lucid architecture: i686 kernel: 2.6.32-22-generic xkbcomp: Error: command ['xkbcomp', ':0', '-w0', '-'] failed with exit code 1: No protocol specified Error: Cannot open display ":0" Exiting ** Affects: xorg (Ubuntu) Importance: Undecided Status: New ** Tags: apport-bug freeze i386 lucid -- Xorg freezes with mwm https://bugs.launchpad.net/bugs/599547 You received this bug notification because you are a member of Ubuntu-X, which is subscribed to xorg in ubuntu. _______________________________________________ Mailing list: https://launchpad.net/~ubuntu-x-swat Post to : [email protected] Unsubscribe : https://launchpad.net/~ubuntu-x-swat More help : https://help.launchpad.net/ListHelp

