/[pkg-src]/trunk/xorg-server/patches/xorg-server-1.17.1-systemd-logind-filter-out-non-signal-messages-from.patch |
Contents of /trunk/xorg-server/patches/xorg-server-1.17.1-systemd-logind-filter-out-non-signal-messages-from.patch
Parent Directory | Revision Log
Revision 2576 -
(show annotations)
(download)
Mon Jun 15 13:02:17 2015 UTC (9 years, 3 months ago) by niro
File size: 3411 byte(s)
Mon Jun 15 13:02:17 2015 UTC (9 years, 3 months ago) by niro
File size: 3411 byte(s)
-fixed garbage patches
1 | From e90798c142dedc4fd296936b69fe34a40d0aa35a Mon Sep 17 00:00:00 2001 |
2 | From: Ray Strode <rstrode@redhat.com> |
3 | Date: Fri, 10 Apr 2015 14:19:50 -0400 |
4 | Subject: [PATCH] systemd-logind: filter out non-signal messages from message |
5 | filter |
6 | |
7 | It's possible to receive a message reply in the message filter if a |
8 | previous message call timed out locally before the reply arrived. |
9 | |
10 | The message_filter function only handles signals, at the moment, and |
11 | does not properly handle message replies. |
12 | |
13 | This commit changes the message_filter function to filter out all |
14 | non-signal messages, including spurious message replies. |
15 | |
16 | https://bugzilla.redhat.com/show_bug.cgi?id=1209347 |
17 | --- |
18 | hw/xfree86/os-support/linux/systemd-logind.c | 3 +++ |
19 | 1 file changed, 3 insertions(+) |
20 | |
21 | diff --git a/hw/xfree86/os-support/linux/systemd-logind.c b/hw/xfree86/os-support/linux/systemd-logind.c |
22 | index 49758f4..57c87c0 100644 |
23 | --- a/hw/xfree86/os-support/linux/systemd-logind.c |
24 | +++ b/hw/xfree86/os-support/linux/systemd-logind.c |
25 | @@ -286,60 +286,63 @@ systemd_logind_ack_pause(struct systemd_logind_info *info, |
26 | DBUS_TYPE_INVALID)) { |
27 | LogMessage(X_ERROR, "systemd-logind: out of memory\n"); |
28 | goto cleanup; |
29 | } |
30 | |
31 | reply = dbus_connection_send_with_reply_and_block(info->conn, msg, |
32 | DBUS_TIMEOUT, &error); |
33 | if (!reply) |
34 | LogMessage(X_ERROR, "systemd-logind: failed to ack pause: %s\n", |
35 | error.message); |
36 | |
37 | cleanup: |
38 | if (msg) |
39 | dbus_message_unref(msg); |
40 | if (reply) |
41 | dbus_message_unref(reply); |
42 | dbus_error_free(&error); |
43 | } |
44 | |
45 | static DBusHandlerResult |
46 | message_filter(DBusConnection * connection, DBusMessage * message, void *data) |
47 | { |
48 | struct systemd_logind_info *info = data; |
49 | struct xf86_platform_device *pdev = NULL; |
50 | InputInfoPtr pInfo = NULL; |
51 | int ack = 0, pause = 0, fd = -1; |
52 | DBusError error; |
53 | dbus_int32_t major, minor; |
54 | char *pause_str; |
55 | |
56 | + if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_SIGNAL) |
57 | + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; |
58 | + |
59 | dbus_error_init(&error); |
60 | |
61 | if (dbus_message_is_signal(message, |
62 | "org.freedesktop.DBus", "NameOwnerChanged")) { |
63 | char *name, *old_owner, *new_owner; |
64 | |
65 | dbus_message_get_args(message, &error, |
66 | DBUS_TYPE_STRING, &name, |
67 | DBUS_TYPE_STRING, &old_owner, |
68 | DBUS_TYPE_STRING, &new_owner, DBUS_TYPE_INVALID); |
69 | if (dbus_error_is_set(&error)) { |
70 | LogMessage(X_ERROR, "systemd-logind: NameOwnerChanged: %s\n", |
71 | error.message); |
72 | dbus_error_free(&error); |
73 | return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; |
74 | } |
75 | |
76 | if (name && strcmp(name, "org.freedesktop.login1") == 0) |
77 | FatalError("systemd-logind disappeared (stopped/restarted?)\n"); |
78 | |
79 | return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; |
80 | } |
81 | |
82 | if (strcmp(dbus_message_get_path(message), info->session) != 0) |
83 | return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; |
84 | |
85 | if (dbus_message_is_signal(message, "org.freedesktop.login1.Session", |
86 | "PauseDevice")) { |
87 | if (!dbus_message_get_args(message, &error, |
88 | DBUS_TYPE_UINT32, &major, |
89 | -- |
90 | 2.3.3 |