From f4d936daa9c89fad2af1b7064e0a11c2f379cd20 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 17 Nov 2010 12:33:17 +0100 Subject: [PATCH] - Fix spice client locking up when dealing with XIM input (#654265) --- ...-few-missing-XLockDisplay-calls-rhbz.patch | 48 +++++++++++++++++++ spice.spec | 7 ++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 0007-spicec-x11-Add-a-few-missing-XLockDisplay-calls-rhbz.patch diff --git a/0007-spicec-x11-Add-a-few-missing-XLockDisplay-calls-rhbz.patch b/0007-spicec-x11-Add-a-few-missing-XLockDisplay-calls-rhbz.patch new file mode 100644 index 0000000..7cbc8cb --- /dev/null +++ b/0007-spicec-x11-Add-a-few-missing-XLockDisplay-calls-rhbz.patch @@ -0,0 +1,48 @@ +From 084225fda75be2bead6e2dad313b9e861d93bffc Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Wed, 17 Nov 2010 12:19:41 +0100 +Subject: [PATCH spice] spicec-x11: Add a few missing XLockDisplay calls (rhbz#654265) + +The XIM functions end up waiting for a reply from the server, so they +need locking around them. Idem for the XLookupString call. +--- + client/x11/red_window.cpp | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/client/x11/red_window.cpp b/client/x11/red_window.cpp +index c3ee1b0..c50e307 100644 +--- a/client/x11/red_window.cpp ++++ b/client/x11/red_window.cpp +@@ -733,7 +733,9 @@ void RedWindow_p::handle_key_press_event(RedWindow& window, XKeyEvent* event) + + if (x_input_context != NULL) { + for (;;) { ++ XLockDisplay(x_display); + len = XwcLookupString(x_input_context, event, utf32_buf, buf_size, &key_sym, &status); ++ XUnlockDisplay(x_display); + if (status != XBufferOverflow) { + break; + } +@@ -767,7 +769,9 @@ void RedWindow_p::handle_key_press_event(RedWindow& window, XKeyEvent* event) + unsigned char buffer[16]; + int i; + ++ XLockDisplay(x_display); + len = XLookupString(event, (char *)buffer, sizeof(buffer), NULL, NULL); ++ XUnlockDisplay(x_display); + for (i = 0; i < len; i++) { + window.get_listener().on_char((uint32_t)buffer[i]); + } +@@ -2135,7 +2139,9 @@ void RedWindow::on_focus_in() + } + _focused = true; + if (x_input_context) { ++ XLockDisplay(x_display); + XwcResetIC(x_input_context); ++ XUnlockDisplay(x_display); + } + XPlatform::on_focus_in(); + get_listener().on_activate(); +-- +1.7.3.2 + diff --git a/spice.spec b/spice.spec index a7449fc..739146b 100644 --- a/spice.spec +++ b/spice.spec @@ -1,6 +1,6 @@ Name: spice Version: 0.6.3 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Implements the SPICE protocol Group: User Interface/Desktops License: LGPLv2+ @@ -13,6 +13,7 @@ Patch3: 0003-Remove-no-longer-used-wstring_printf-functions.patch Patch4: 0004-spicec-x11-Do-not-set-_NET_WM_USER_TIME-to-0-on-star.patch Patch5: 0005-spicec-x11-Listen-for-selection-owner-window-destroy.patch Patch6: 0006-spicec-Make-cegui-log-to-app_data_dir-cegui.log.patch +Patch7: 0007-spicec-x11-Add-a-few-missing-XLockDisplay-calls-rhbz.patch # https://bugzilla.redhat.com/show_bug.cgi?id=613529 ExclusiveArch: i686 x86_64 @@ -76,6 +77,7 @@ using spice-server, you will need to install spice-server-devel. %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 %build %configure --enable-gui @@ -118,6 +120,9 @@ rm -f %{buildroot}%{_libdir}/libspice-server.la %endif %changelog +* Wed Nov 17 2010 Hans de Goede - 0.6.3-4 +- Fix spice client locking up when dealing with XIM input (#654265) + * Sat Nov 6 2010 Hans de Goede - 0.6.3-3 - Log to ~/.spicec/cegui.log rather then to CEGUI.log in the cwd, this fixes spicec from aborting when run in a non writable dir (#650253)