e51ad7ce4f6169df393c5eb96a05b7fd74483194
[AGL/meta-agl.git] / meta-app-framework / recipes-core / dbus-cynagora / dbus-cynagora / 0006-Fix-SIGSEGV-on-disconnections.patch
1 From 28077faa11827e1ca7a7245ffd62ee78091b6bd2 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
3 Date: Fri, 16 Aug 2019 13:29:23 +0200
4 Subject: [PATCH 6/8] Fix SIGSEGV on disconnections
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Sometime, at start of the system, dbus-daemon was crashing
10 because a pending authorisation were reactivating a closed
11 connection.
12
13 Also, clean unused function.
14
15 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
16 ---
17  bus/check.c      |  5 +++++
18  bus/check.h      |  1 +
19  bus/connection.c | 14 +++-----------
20  bus/connection.h |  3 ---
21  4 files changed, 9 insertions(+), 14 deletions(-)
22
23 diff --git a/bus/check.c b/bus/check.c
24 index f3d283f..b73d08b 100644
25 --- a/bus/check.c
26 +++ b/bus/check.c
27 @@ -617,3 +617,8 @@ bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
28      }
29  }
30  
31 +void
32 +bus_deferred_message_abort (BusDeferredMessage *deferred_message)
33 +{
34 +  deferred_message->response_callback = NULL;
35 +}
36 diff --git a/bus/check.h b/bus/check.h
37 index 9c13c18..d718a69 100644
38 --- a/bus/check.h
39 +++ b/bus/check.h
40 @@ -93,6 +93,7 @@ void                bus_deferred_message_set_policy_check_info (BusDeferredMessa
41                                                                  const char *privilege);
42  dbus_bool_t         bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message,
43                                                                 DBusError *error);
44 +void                bus_deferred_message_abort                (BusDeferredMessage *deferred_message);
45  
46  
47  #ifdef DBUS_ENABLE_EMBEDDED_TESTS
48 diff --git a/bus/connection.c b/bus/connection.c
49 index ee93384..b520d57 100644
50 --- a/bus/connection.c
51 +++ b/bus/connection.c
52 @@ -47,6 +47,7 @@
53  #define MAX_LOG_COMMAND_LEN 50
54  
55  static void bus_connection_remove_transactions (DBusConnection *connection);
56 +static void bus_connection_clear_deferred_messages (DBusConnection *connection);
57  
58  typedef struct
59  {
60 @@ -2821,17 +2822,7 @@ bus_connection_pop_deferred_message (DBusConnection *connection)
61    return NULL;
62  }
63  
64 -dbus_bool_t
65 -bus_connection_putback_deferred_message (DBusConnection *connection, BusDeferredMessage *message)
66 -{
67 -  BusConnectionData *d = BUS_CONNECTION_DATA(connection);
68 -  if (_dbus_list_prepend(&d->deferred_messages, message))
69 -    {
70 -      return TRUE;
71 -    }
72 -  return FALSE;
73 -}
74 -
75 +static
76  void
77  bus_connection_clear_deferred_messages (DBusConnection *connection)
78  {
79 @@ -2846,6 +2837,7 @@ bus_connection_clear_deferred_messages (DBusConnection *connection)
80        next = _dbus_list_get_next_link (&d->deferred_messages, link);
81        message = link->data;
82  
83 +      bus_deferred_message_abort(message);
84        bus_deferred_message_unref(message);
85        _dbus_list_remove_link(&d->deferred_messages, link);
86  
87 diff --git a/bus/connection.h b/bus/connection.h
88 index 97dae96..6af7bf1 100644
89 --- a/bus/connection.h
90 +++ b/bus/connection.h
91 @@ -90,15 +90,12 @@ dbus_bool_t         bus_connection_queue_deferred_message   (DBusConnection *con
92                                                               BusDeferredMessage *message,
93                                                               dbus_bool_t prepend);
94  BusDeferredMessage *bus_connection_pop_deferred_message     (DBusConnection *connection);
95 -dbus_bool_t         bus_connection_putback_deferred_message (DBusConnection *connection,
96 -                                                             BusDeferredMessage *message);
97  void                bus_connection_remove_deferred_message  (DBusConnection *connection,
98                                                               BusDeferredMessage *message);
99  dbus_bool_t         bus_connection_replace_deferred_message (DBusConnection *connection,
100                                                               BusDeferredMessage *oldMessage,
101                                                               BusDeferredMessage *newMessage);
102  void                bus_connection_dispatch_deferred        (DBusConnection *connection);
103 -void                bus_connection_clear_deferred_messages  (DBusConnection *connection);
104  
105  
106  /* called by signals.c */
107 -- 
108 2.21.1
109