ubuntu-x-swat team mailing list archive
-
ubuntu-x-swat team
-
Mailing list archive
-
Message #79723
[Bug 599547] [NEW] Xorg freezes with mwm
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 xorg-devel@xxxxxxxxxxxxxxxxxxxxx. 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 <peter.hutterer@xxxxxxxxx>
To: "X.Org Devel List" <xorg-devel@xxxxxxxxxxxxxxxxxxxxx>
Cc: "Peter A. Buhr" <pabuhr@xxxxxxxxxxxxxxxxxxxxxx>,
Keith Packard <keithp@xxxxxxxxxx>,
Daniel Stone <daniel@xxxxxxxxxxxxxxx>
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 <peter.hutterer@xxxxxxxxx>
---
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.
Follow ups
References