[PATCH] Prevent crashes due to accessing X server from multiple threads
Vratislav Podzimek
vpodzime at redhat.com
Fri Jul 18 07:28:33 UTC 2014
On Thu, 2014-07-17 at 13:21 -0400, David Shea wrote:
> On 07/17/2014 10:20 AM, Vratislav Podzimek wrote:
> > Gdk and Xklavier both access the X server, so we have to make sure those calls
> > happen from a single thread (the main loop one).
> >
> > Make the join_layout_variant function public now that it is used from a
> > different module.
> >
> > Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
> > ---
> > anaconda | 2 -
> > pyanaconda/keyboard.py | 371 +------------------------------
> > pyanaconda/ui/gui/spokes/keyboard.py | 9 +-
> > pyanaconda/ui/gui/spokes/welcome.py | 3 +-
> > pyanaconda/ui/gui/xkl_wrapper.py | 383 ++++++++++++++++++++++++++++++++
> > tests/pyanaconda_tests/keyboard_test.py | 6 +-
> > 6 files changed, 400 insertions(+), 374 deletions(-)
> > create mode 100644 pyanaconda/ui/gui/xkl_wrapper.py
> >
>
> > diff --git a/pyanaconda/ui/gui/spokes/keyboard.py b/pyanaconda/ui/gui/spokes/keyboard.py
> > index f76fa84..3c4d351 100644
> > --- a/pyanaconda/ui/gui/spokes/keyboard.py
> > +++ b/pyanaconda/ui/gui/spokes/keyboard.py
> > @@ -26,6 +26,7 @@ from pyanaconda.ui.gui import GUIObject
> > from pyanaconda.ui.gui.spokes import NormalSpoke
> > from pyanaconda.ui.categories.localization import LocalizationCategory
> > from pyanaconda.ui.gui.utils import gtk_call_once, escape_markup, gtk_batch_map, timed_action
> > +from pyanaconda.ui.gui.xkl_wrapper import XklWrapper
> > from pyanaconda import keyboard
> > from pyanaconda import flags
> > from pyanaconda.i18n import _, N_, CN_
> > @@ -65,7 +66,7 @@ class AddLayoutDialog(GUIObject):
> >
> > def __init__(self, *args):
> > GUIObject.__init__(self, *args)
> > - self._xkl_wrapper = keyboard.XklWrapper.get_instance()
> > + self._xkl_wrapper = XklWrapper.get_instance()
> > self._chosen_layouts = []
> >
> > def matches_entry(self, model, itr, user_data=None):
> > @@ -184,7 +185,7 @@ class ConfigureSwitchingDialog(GUIObject):
> >
> > def __init__(self, *args):
> > GUIObject.__init__(self, *args)
> > - self._xkl_wrapper = keyboard.XklWrapper.get_instance()
> > + self._xkl_wrapper = XklWrapper.get_instance()
> >
> > self._switchingOptsStore = self.builder.get_object("switchingOptsStore")
> >
> > @@ -273,7 +274,7 @@ class KeyboardSpoke(NormalSpoke):
> > NormalSpoke.__init__(self, *args)
> > self._remove_last_attempt = False
> > self._confirmed = False
> > - self._xkl_wrapper = keyboard.XklWrapper.get_instance()
> > + self._xkl_wrapper = XklWrapper.get_instance()
> > self._add_dialog = None
> > self._ready = False
> >
> > @@ -607,7 +608,7 @@ class KeyboardSpoke(NormalSpoke):
> > try:
> > self._addLayout(self._store, layout)
> > valid_layouts += layout
> > - except keyboard.XklWrapperError:
> > + except XklWrapperError:
> > log.error("Failed to add layout '%s'", layout)
>
> The exception needs to be imported from xkl_wrapper.
Another good catch. Fixing locally as well. Thanks!
--
Vratislav Podzimek
Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic
More information about the anaconda-patches
mailing list