[PATCH 1/1] Autoload nouveau on NetBSD as well

2016-11-03 Thread Maya Rashish
It has added support for it
---
 hw/xfree86/common/xf86pciBus.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index bed4434..15bd59e 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -1189,7 +1189,7 @@ xf86VideoPtrToDriverList(struct pci_device *dev,
 {
 int idx = 0;
 
-#ifdef __linux__
+#if defined(__linux__) || defined(__NetBSD__)
 driverList[idx++] = "nouveau";
 #endif
 driverList[idx++] = "nv";
-- 
2.10.1

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH v4] Compose: add rouble currency

2016-11-03 Thread Mihail Konev
v4:
- Fix typo in description
- Use just 'dead_currency Er' instead of 'dead_currency Er Equals'
- Use also 'Compose/dead_currency Equals Pe'
>From ae1bf2fbd2c3893366198a80aed8743af656ee88 Mon Sep 17 00:00:00 2001
From: Victor Kustov 
Date: Mon, 17 Oct 2016 19:44:36 +
Subject: [PATCH 1/5] Compose: add rouble currency sequence

Signed-off-by: Victor Kustov 
Reviewed-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 4 
 1 file changed, 4 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index adc24fb5b5c2..d7dc74140989 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ b/nls/en_US.UTF-8/Compose.pre
@@ -190,6 +190,10 @@ XCOMM "₪" U20aa NEW SHEQEL SIGN
 : "€"   EuroSign # EURO SIGN
 : "€"   EuroSign # EURO SIGN
 : "€"   EuroSign # EURO SIGN
+  : "₽"   U20bd # ROUBLE SIGN
+  : "₽"   U20bd # ROUBLE SIGN
+  : "₽"   U20bd # ROUBLE SIGN
+  : "₽"   U20bd # ROUBLE SIGN
 XCOMM "₭" U20ad KIP SIGN
 XCOMM "₮" U20ae TUGRIK SIGN
 XCOMM "₯" U20af DRACHMA SIGN
-- 
2.9.2

>From dae875f5ac0664035e7f4dab724b307245d842b6 Mon Sep 17 00:00:00 2001
From: Mihail Konev 
Date: Mon, 17 Oct 2016 20:17:31 +
Subject: [PATCH 2/5] Compose: cyrillic rouble sequence

Signed-off-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 4 
 1 file changed, 4 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index d7dc74140989..e71903702d57 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ b/nls/en_US.UTF-8/Compose.pre
@@ -194,6 +194,10 @@ XCOMM "₪" U20aa NEW SHEQEL SIGN
   : "₽"   U20bd # ROUBLE SIGN
   : "₽"   U20bd # ROUBLE SIGN
   : "₽"   U20bd # ROUBLE SIGN
+: "₽"   U20bd # ROUBLE SIGN
+: "₽"   U20bd # ROUBLE SIGN
+   : "₽"   U20bd # ROUBLE SIGN
+   : "₽"   U20bd # ROUBLE SIGN
 XCOMM "₭" U20ad KIP SIGN
 XCOMM "₮" U20ae TUGRIK SIGN
 XCOMM "₯" U20af DRACHMA SIGN
-- 
2.9.2

>From 76e28b8cd84449f25b7e45e96afbc997cfe83878 Mon Sep 17 00:00:00 2001
From: Mihail Konev 
Date: Fri, 4 Nov 2016 05:48:31 +0500
Subject: [PATCH 3/5] Compose: add dead_currency rouble sequences

Signed-off-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 8 
 1 file changed, 8 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index e71903702d57..2c0b3582b2db 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ b/nls/en_US.UTF-8/Compose.pre
@@ -5323,6 +5323,14 @@ XCOMM
: "₩"   WonSign # WON SIGN
: "円"   U5186  # YEN
: "¥"   yen # YEN SIGN
+: "₽"   U20bd   # ROUBLE SIGN
+: "₽"   U20bd   # ROUBLE SIGN
+: "₽"   U20bd   # ROUBLE SIGN
+: "₽"   U20bd   # ROUBLE SIGN
+   : "₽"   U20bd   # ROUBLE SIGN
+   : "₽"   U20bd   # ROUBLE SIGN
+ : "₽"   U20bd   # ROUBLE SIGN
+ : "₽"   U20bd   # ROUBLE SIGN
 : "¤"   currency# CURRENCY 
SIGN
 : "¤"   currency# 
CURRENCY SIGN
: "¤"   currency# CURRENCY 
SIGN
-- 
2.9.2

>From f680fc24736a3051a85a7fde099720c286070879 Mon Sep 17 00:00:00 2001
From: Mihail Konev 
Date: Fri, 4 Nov 2016 05:49:24 +0500
Subject: [PATCH 4/5] Compose: peseta sign consistency with rouble

Signed-off-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 4 
 1 file changed, 4 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index 2c0b3582b2db..1272385936ae 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ b/nls/en_US.UTF-8/Compose.pre
@@ -5323,6 +5323,10 @@ XCOMM
: "₩"   WonSign # WON SIGN
: "円"   U5186  # YEN
: "¥"   yen # YEN SIGN
+: "₧"   PesetaSign  # PESETA SIGN
+: "₧"   PesetaSign  # PESETA SIGN
+: "₧"   PesetaSign  # PESETA SIGN
+: "₧"   PesetaSign  # PESETA SIGN
 : "₽"   U20bd   # ROUBLE SIGN
 : "₽"   U20bd   # ROUBLE SIGN
 : "₽"   U20bd   # ROUBLE SIGN
-- 
2.9.2

>From 7bc05c72bbd4cf7c4b8c9179ce4e2acfa4395796 Mon Sep 17 00:00:00 2001
From: Mihail Konev 
Date: Fri, 4 Nov 2016 06:41:01 +0500
Subject: [PATCH 5/5] Compose: cyrillic ruble sign consistency with latin

Signed-off-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 8 
 1 file changed, 8 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index 1272385936ae..64de8d251008 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ 

Re: [PATCH v3] Compose: add rouble currency

2016-11-03 Thread Mihail Konev
v2 was assigning 'Compose Equals p/P' to rouble currency sign "₽".

Currencies also have a "canonical" form 'dead_currency ...';
in particular 'dead_currency P' results in pesetta sign "₧".

Assign the 'dead_currency Minus p/P' to pesetta,
and 'dead_currency Equals p/P' to rouble.

>From ae1bf2fbd2c3893366198a80aed8743af656ee88 Mon Sep 17 00:00:00 2001
From: Victor Kustov 
Date: Mon, 17 Oct 2016 19:44:36 +
Subject: [PATCH 1/4] Compose: add rouble currency sequence

Signed-off-by: Victor Kustov 
Reviewed-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 4 
 1 file changed, 4 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index adc24fb5b5c2..d7dc74140989 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ b/nls/en_US.UTF-8/Compose.pre
@@ -190,6 +190,10 @@ XCOMM "₪" U20aa NEW SHEQEL SIGN
 : "€"   EuroSign # EURO SIGN
 : "€"   EuroSign # EURO SIGN
 : "€"   EuroSign # EURO SIGN
+  : "₽"   U20bd # ROUBLE SIGN
+  : "₽"   U20bd # ROUBLE SIGN
+  : "₽"   U20bd # ROUBLE SIGN
+  : "₽"   U20bd # ROUBLE SIGN
 XCOMM "₭" U20ad KIP SIGN
 XCOMM "₮" U20ae TUGRIK SIGN
 XCOMM "₯" U20af DRACHMA SIGN
-- 
2.9.2

>From 88e2d4489be56bfb828cf18c56629ef1b9c1f415 Mon Sep 17 00:00:00 2001
From: Mihail Konev 
Date: Mon, 17 Oct 2016 20:17:31 +
Subject: [PATCH 2/4] Compose: cyrillic rouble sequence

Signed-off-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 4 
 1 file changed, 4 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index d7dc74140989..a25d40446162 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ b/nls/en_US.UTF-8/Compose.pre
@@ -194,6 +194,10 @@ XCOMM "₪" U20aa NEW SHEQEL SIGN
   : "₽"   U20bd # ROUBLE SIGN
   : "₽"   U20bd # ROUBLE SIGN
   : "₽"   U20bd # ROUBLE SIGN
+: "₽"   U20bd # ROUBLE SIGN
+: "₽"   U20bd # ROUBLE SIGN
+: "₽"   U20bd # ROUBLE SIGN
+: "₽"   U20bd # ROUBLE SIGN
 XCOMM "₭" U20ad KIP SIGN
 XCOMM "₮" U20ae TUGRIK SIGN
 XCOMM "₯" U20af DRACHMA SIGN
-- 
2.9.2

>From 4ada138513a537e830e48cefe7d688b3eda02694 Mon Sep 17 00:00:00 2001
From: Mihail Konev 
Date: Fri, 4 Nov 2016 05:48:31 +0500
Subject: [PATCH 3/4] Compose: add dead_currency rouble sequences

Signed-off-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 8 
 1 file changed, 8 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index a25d40446162..9b28d6f4375b 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ b/nls/en_US.UTF-8/Compose.pre
@@ -5323,6 +5323,14 @@ XCOMM
: "₩"   WonSign # WON SIGN
: "円"   U5186  # YEN
: "¥"   yen # YEN SIGN
+: "₽"   U20bd   # ROUBLE SIGN
+: "₽"   U20bd   # ROUBLE SIGN
+: "₽"   U20bd   # ROUBLE SIGN
+: "₽"   U20bd   # ROUBLE SIGN
+   : "₽"   U20bd   # ROUBLE SIGN
+   : "₽"   U20bd   # ROUBLE SIGN
+   : "₽"   U20bd   # ROUBLE SIGN
+   : "₽"   U20bd   # ROUBLE SIGN
 : "¤"   currency# CURRENCY 
SIGN
 : "¤"   currency# 
CURRENCY SIGN
: "¤"   currency# CURRENCY 
SIGN
-- 
2.9.2

>From 014d553d9a4c9243c0056af62ded9aedefe7a7ab Mon Sep 17 00:00:00 2001
From: Mihail Konev 
Date: Fri, 4 Nov 2016 05:49:24 +0500
Subject: [PATCH 4/4] Compose: pesetta sign consistency with rouble

Signed-off-by: Mihail Konev 
---
 nls/en_US.UTF-8/Compose.pre | 4 
 1 file changed, 4 insertions(+)

diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre
index 9b28d6f4375b..c7f3f221aef9 100644
--- a/nls/en_US.UTF-8/Compose.pre
+++ b/nls/en_US.UTF-8/Compose.pre
@@ -5323,6 +5323,10 @@ XCOMM
: "₩"   WonSign # WON SIGN
: "円"   U5186  # YEN
: "¥"   yen # YEN SIGN
+: "₧"   PesetaSign  # PESETA SIGN
+: "₧"   PesetaSign  # PESETA SIGN
+: "₧"   PesetaSign  # PESETA SIGN
+: "₧"   PesetaSign  # PESETA SIGN
 : "₽"   U20bd   # ROUBLE SIGN
 : "₽"   U20bd   # ROUBLE SIGN
 : "₽"   U20bd   # ROUBLE SIGN
-- 
2.9.2

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: Debugging keyboard overlay+xbindkeys

2016-11-03 Thread Ran Benita
On Thu, Nov 03, 2016 at 01:22:03PM +0100, Mariusz Mazur wrote:
> What I did:
> 1. Switched the overlay key to act as a modifier.
>  interpret Overlay1_Enable+AnyOfOrNone(all) {
> -action= LockControls(controls=Overlay1);
> +action= SetControls(controls=Overlay1);
> 
> 2. Bound it to caps lock.
> 3. Defined caps+hjkl to act as arrow keys.
> 4. Defined caps+f to send XF86LaunchA to start a new terminal window
> (among other similar shortcuts, like ones for switching virtual
> desktops, but caps+f is the worst offender, so I'll focus on that).

Nice hack.

> It would seem using the overlay mechanism the way I do messes with
> whatever mechanism xbindkeys/lxde use for intercepting keyboard
> shortcuts. Does anybody have any suggestions on any tools/approaches I
> could use to try to debug this further? Or is this mechanism something
> so ancient that there's hope of getting it to work correctly?

Just a guess, but maybe you are hitting this?
https://cgit.freedesktop.org/xorg/xserver/tree/xkb/xkbPrKeyEv.c?id=xorg-server-1.18.99.902#n134

Try running `xbindkeys --verbose` and see its output on key
press/relase? The problem is in one of xserver, libX11 or xbindkeys,
this would help narrow it down.

xbindkeys, for some reason, matches keysym bindings strangely; instead
of converting keycodes to keysyms and comparing the keysyms, it converts
the keysyms to keycodes and compares keycodes. This is lossy and can
cause the wrong binding to match. However, I don't think this is the
issue in the scenario you describe, unless you have some other keys
which map to XF86LaunchA.

Ran
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Bug in randr/rrtransform.c : RRTrasnformCompute()

2016-11-03 Thread Stirling Westrup
I've noticed that the transformation matrices that this function builds for
rotated screens is not quite correct.

In particular, it consistently builds maps from 0 to width or height
instead of from 0 to width-1 or height-1.

This means that an inverted screen maps (0,0) to (width,height) instead of
(width-1,height-1). This causes out-of-boundary errors when mapping screens.



-- 
Stirling Westrup
Programmer, Entrepreneur.
https://www.linkedin.com/e/fpf/77228
http://www.linkedin.com/in/swestrup
http://technaut.livejournal.com
http://sourceforge.net/users/stirlingwestrup
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Debugging keyboard overlay+xbindkeys

2016-11-03 Thread Mariusz Mazur
Short version: using keyboard overlay to send e.g. XF86LaunchA, then
intercepting that with something like xbindkeys and launching an app
often triggers a bug which messes up the 'keycombo intercept'
mechanism in xorg.


Long version: inspired by fully programmable keyboards like the
ergodox or UHK, I've attempted to get the same functionality from
xorg. And almost succeeded.

What I did:
1. Switched the overlay key to act as a modifier.
 interpret Overlay1_Enable+AnyOfOrNone(all) {
-action= LockControls(controls=Overlay1);
+action= SetControls(controls=Overlay1);

2. Bound it to caps lock.
3. Defined caps+hjkl to act as arrow keys.
4. Defined caps+f to send XF86LaunchA to start a new terminal window
(among other similar shortcuts, like ones for switching virtual
desktops, but caps+f is the worst offender, so I'll focus on that).

The arrow keys thing works fine. The "launch app X" part doesn't. I've
tried various combinations of : kde4+konsole+xbindkeys and
lxde+lxterminal and it just doesn't work properly. The issues I've
seen:
- caps+f doesn't register some times; I need to mash it twice or
thrice for it to actually start a terminal
- xev says that sometimes the XF86LaunchA is not intercepted by
xbindkeys/lxde and actually arrives in xev; I'm guessing that might
have something to do with the previous issue
- sometimes a terminal starts in a weird zombie state, in which it
does not respond to keyboard and seems 'unfocused' (the cmd prompt
rectangle is not filled, even though the window is focused)
- The worst offender is my old kde4+xbindkeys combination (with up to
date xorg and kernel mind you) which very often (not always though)
blocks all keyboard input to all windows (xev shows nothing when I
press keys) until I either enter the exact key combination that caused
the issue (so usually caps+f) once or twice at which point it unlocks
the keyboard or I switch to some other tty and back again, which also
resets the problem (along with my xkb_keymap, which I then need to
reload). Ah, just figured it out. When in this 'locked' state *all* of
the keys I press end up intercepted by xbindkeys, which is why they
don't arrive in any apps.

It would seem using the overlay mechanism the way I do messes with
whatever mechanism xbindkeys/lxde use for intercepting keyboard
shortcuts. Does anybody have any suggestions on any tools/approaches I
could use to try to debug this further? Or is this mechanism something
so ancient that there's hope of getting it to work correctly?
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH xserver] glamor: restore vfunc handlers on init failure

2016-11-03 Thread Hans de Goede

Hi,

On 03-11-16 09:59, Olivier Fourdan wrote:

In glamor_init(), if the minimum requirements are not met, glamor may
fail after setting up its own CloseScreen() and DestroyPixmap()
routines, leading to a crash when either of the two routines is called
if glamor failed to complete its initialization, e.g:

  (EE) Backtrace:
  (EE) 0:  Xwayland (OsSigHandler+0x29)
  (EE) 1: /lib64/libpthread.so.0 (__restore_rt+0x0)
  (EE) 2: Xwayland (glamor_sync_close+0x2a)
  (EE) 3: Xwayland (glamor_close_screen+0x52)
  (EE) 4: Xwayland (CursorCloseScreen+0x88)
  (EE) 5: Xwayland (AnimCurCloseScreen+0xa4)
  (EE) 6: Xwayland (present_close_screen+0x42)
  (EE) 7: Xwayland (dix_main+0x4f9)
  (EE) 8: /lib64/libc.so.6 (__libc_start_main+0xf1)
  (EE) 9:  Xwayland (_start+0x2a)

Restore the previous CloseScreen() and DestroyPixmap() vfunc handlers in
case of failure when checking for the minimum requirements, so that if
any of the requirement is not met we don't leave the CloseScreen() and
DestroyPixmap() from glamor handlers in place.

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1390018

Signed-off-by: Olivier Fourdan 


Patch looks good to me:

Reviewed-by: Hans de Goede 

Regards,

Hans


---
 glamor/glamor.c | 11 ---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/glamor/glamor.c b/glamor/glamor.c
index b771832..c54cf3b 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -470,7 +470,7 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 LogMessage(X_WARNING,
"glamor%d: Failed to allocate screen private\n",
screen->myNum);
-goto fail;
+goto free_glamor_private;
 }

 glamor_set_screen_private(screen, glamor_priv);
@@ -480,7 +480,7 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 LogMessage(X_WARNING,
"glamor%d: Failed to allocate pixmap private\n",
screen->myNum);
-goto fail;
+goto free_glamor_private;
 }

 if (!dixRegisterPrivateKey(_gc_private_key, PRIVATE_GC,
@@ -488,7 +488,7 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 LogMessage(X_WARNING,
"glamor%d: Failed to allocate gc private\n",
screen->myNum);
-goto fail;
+goto free_glamor_private;
 }

 glamor_priv->saved_procs.close_screen = screen->CloseScreen;
@@ -731,6 +731,11 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 return TRUE;

  fail:
+/* Restore default CloseScreen and DestroyPixmap handlers */
+screen->CloseScreen = glamor_priv->saved_procs.close_screen;
+screen->DestroyPixmap = glamor_priv->saved_procs.destroy_pixmap;
+
+ free_glamor_private:
 free(glamor_priv);
 glamor_set_screen_private(screen, NULL);
 return FALSE;


___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH xserver] dix: Make sure client is not in output_pending chain after closed (RH 1382444)

2016-11-03 Thread Hans de Goede

Hi,

On 02-11-16 21:39, Keith Packard wrote:

I think it is possible that output could get queued to a client during
CloseDownClient. After it is removed from the pending queue, active
grabs are released, the client is awoken if sleeping and any work
queue entries related to the client are processed.

To fix this, move the call removing it from the output_pending chain
until after clientGone has been set and then check clientGone in
output_pending_mark.

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1382444
Signed-off-by: Keith Packard 


Patch looks good to me:

Reviewed-by: Hans de Goede 

Regards,

Hans



---
 dix/dispatch.c  | 2 +-
 include/dixstruct.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/dix/dispatch.c b/dix/dispatch.c
index e111377..3d0fe26 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -3406,7 +3406,6 @@ CloseDownClient(ClientPtr client)
 UngrabServer(client);
 }
 mark_client_not_ready(client);
-xorg_list_del(>output_pending);
 BITCLEAR(grabWaiters, client->index);
 DeleteClientFromAnySelections(client);
 ReleaseActiveGrabs(client);
@@ -3435,6 +3434,7 @@ CloseDownClient(ClientPtr client)
 if (ClientIsAsleep(client))
 ClientSignal(client);
 ProcessWorkQueueZombies();
+output_pending_clear(client);
 CloseDownConnection(client);

 /* If the client made it to the Running stage, nClients has
diff --git a/include/dixstruct.h b/include/dixstruct.h
index 3b578f8..d71b0ac 100644
--- a/include/dixstruct.h
+++ b/include/dixstruct.h
@@ -159,7 +159,7 @@ extern struct xorg_list output_pending_clients;
 static inline void
 output_pending_mark(ClientPtr client)
 {
-if (xorg_list_is_empty(>output_pending))
+if (!client->clientGone && xorg_list_is_empty(>output_pending))
 xorg_list_append(>output_pending, _pending_clients);
 }



___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver] glamor: restore vfunc handlers on init failure

2016-11-03 Thread Olivier Fourdan
In glamor_init(), if the minimum requirements are not met, glamor may
fail after setting up its own CloseScreen() and DestroyPixmap()
routines, leading to a crash when either of the two routines is called
if glamor failed to complete its initialization, e.g:

  (EE) Backtrace:
  (EE) 0:  Xwayland (OsSigHandler+0x29)
  (EE) 1: /lib64/libpthread.so.0 (__restore_rt+0x0)
  (EE) 2: Xwayland (glamor_sync_close+0x2a)
  (EE) 3: Xwayland (glamor_close_screen+0x52)
  (EE) 4: Xwayland (CursorCloseScreen+0x88)
  (EE) 5: Xwayland (AnimCurCloseScreen+0xa4)
  (EE) 6: Xwayland (present_close_screen+0x42)
  (EE) 7: Xwayland (dix_main+0x4f9)
  (EE) 8: /lib64/libc.so.6 (__libc_start_main+0xf1)
  (EE) 9:  Xwayland (_start+0x2a)

Restore the previous CloseScreen() and DestroyPixmap() vfunc handlers in
case of failure when checking for the minimum requirements, so that if
any of the requirement is not met we don't leave the CloseScreen() and
DestroyPixmap() from glamor handlers in place.

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1390018

Signed-off-by: Olivier Fourdan 
---
 glamor/glamor.c | 11 ---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/glamor/glamor.c b/glamor/glamor.c
index b771832..c54cf3b 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -470,7 +470,7 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 LogMessage(X_WARNING,
"glamor%d: Failed to allocate screen private\n",
screen->myNum);
-goto fail;
+goto free_glamor_private;
 }
 
 glamor_set_screen_private(screen, glamor_priv);
@@ -480,7 +480,7 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 LogMessage(X_WARNING,
"glamor%d: Failed to allocate pixmap private\n",
screen->myNum);
-goto fail;
+goto free_glamor_private;
 }
 
 if (!dixRegisterPrivateKey(_gc_private_key, PRIVATE_GC,
@@ -488,7 +488,7 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 LogMessage(X_WARNING,
"glamor%d: Failed to allocate gc private\n",
screen->myNum);
-goto fail;
+goto free_glamor_private;
 }
 
 glamor_priv->saved_procs.close_screen = screen->CloseScreen;
@@ -731,6 +731,11 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 return TRUE;
 
  fail:
+/* Restore default CloseScreen and DestroyPixmap handlers */
+screen->CloseScreen = glamor_priv->saved_procs.close_screen;
+screen->DestroyPixmap = glamor_priv->saved_procs.destroy_pixmap;
+
+ free_glamor_private:
 free(glamor_priv);
 glamor_set_screen_private(screen, NULL);
 return FALSE;
-- 
2.9.3

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel