1. 08 Sep, 2014 5 commits
    • Luiz Augusto von Dentz's avatar
      gdbus: Fix crash when watch is toggled or disconnected · 3112f9b7
      Luiz Augusto von Dentz authored
      This partially reverts 510b32b7156625b9df737c916b7a7a5c6fb285b9 since it
      still necessary to take a reference before calling dbus_watch_handle
      since internally it can call watch_info_free as in the following trace:
      
       Invalid read of size 8
         at 0x121085: watch_func (mainloop.c:105)
         by 0x4C72694: g_main_context_dispatch (gmain.c:2539)
         by 0x4C729C7: g_main_context_iterate.isra.23 (gmain.c:3146)
         by 0x4C72DC1: g_main_loop_run (gmain.c:3340)
         by 0x120541: main (main.c:551)
       Address 0x5bbcd90 is 16 bytes inside a block of size 24 free'd
         at 0x4A079AE: free (vg_replace_malloc.c:427)
         by 0x4C7837E: g_free (gmem.c:252)
         by 0x4F708BF: dbus_watch_set_data (dbus-watch.c:614)
         by 0x4F70938: _dbus_watch_unref (dbus-watch.c:132)
         by 0x4F6E9A7: _dbus_transport_handle_watch (dbus-transport.c:884)
         by 0x4F59AFB: _dbus_connection_handle_watch (dbus-connection.c:1497)
         by 0x4F70AF9: dbus_watch_handle (dbus-watch.c:683)
         by 0x121084: watch_func (mainloop.c:103)
         by 0x4C72694: g_main_context_dispatch (gmain.c:2539)
         by 0x4C729C7: g_main_context_iterate.isra.23 (gmain.c:3146)
         by 0x4C72DC1: g_main_loop_run (gmain.c:3340)
         by 0x120541: main (main.c:551)
      3112f9b7
    • Luiz Augusto von Dentz's avatar
      gdbus: Fix crash when calling g_dbus_add_service_watch · 7ab29db8
      Luiz Augusto von Dentz authored
      If g_dbus_add_service_watch is called for service which bus name is
      already known the following crash can happen:
      
      invalid read of size 1
        at 0x4C2A2F2: strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
        by 0x4E97722: g_strdup (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x405B0C: update_name_cache (watch.c:435)
        by 0x405C37: update_service (watch.c:593)
        by 0x4E7A2A5: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4E7A627: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4E7AA39: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4038EA: client_ready (test-gdbus-client.c:1014)
        by 0x4E9E5E0: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4E9E7A5: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4E9EB1A: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x403614: main (test-gdbus-client.c:1058)
      Address 0x5dbe5d0 is 0 bytes inside a block of size 7 free'd
        at 0x4C28577: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
        by 0x4E7FF7E: g_free (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x405B04: update_name_cache (watch.c:434)
        by 0x405C37: update_service (watch.c:593)
        by 0x4E7A2A5: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4E7A627: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4E7AA39: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4038EA: client_ready (test-gdbus-client.c:1014)
        by 0x4E9E5E0: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4E9E7A5: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x4E9EB1A: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.3800.2)
        by 0x403614: main (test-gdbus-client.c:1058)
      7ab29db8
    • Luiz Augusto von Dentz's avatar
      Revert "gdbus: Don't include just added interfaces in GetManagedObjects" · 3bfd0ea0
      Luiz Augusto von Dentz authored
      This actually creates a problem since the code now does flush any pending
      message on the queue any signal will be send right away before the
      actual reply to GetManagedObjects which will not contain those interfaces.
      3bfd0ea0
    • Andrei Emeltchenko's avatar
      gdbus: Fix use after free · 74f3c3a3
      Andrei Emeltchenko authored
      Refactor filter_data_remove_callback so that we do not iterate over
      freed pointer.
      74f3c3a3
    • Claudio Takahasi's avatar
      gdbus: Avoid reporting GDBusClient disconnect twice · 29e7eb4e
      Claudio Takahasi authored
      No matter if disconnection was reported previously, g_dbus_client_unref()
      was always calling service disconnect callback. This patch fix the
      following scenario:
      1) service disconnects from the bus
      2) disconnect callback gets called
      3) client calls g_dbus_client_unref(), disconnect callback is called
         again.
      29e7eb4e
  2. 24 Mar, 2014 1 commit
  3. 06 Mar, 2014 1 commit
  4. 19 Feb, 2014 3 commits
    • Luiz Augusto von Dentz's avatar
      gdbus: Replace g_timeout_add with g_idle_add · 85986112
      Luiz Augusto von Dentz authored
      Passing 0 as timeout to g_timeout_add should equivalent to g_idle_add.
      85986112
    • Anderson Lizardo's avatar
      gdbus: Fix incorrect DBusConnection reference counting · 0b2e4b1d
      Anderson Lizardo authored
      Commit abfc2b0dd5c3e33abfdf1a815b16d492c1751c06 attempted to fix a crash
      related to improper reference counting, but the main issue was that the
      reference was taken only during the function call (which is usually
      unnecessary for single thread), but still passed a pointer to
      DBusConnection to a function that is called by the mainloop. This left a
      window where the DBusConnection can be destroyed.
      
      Fixes this crash on unit/test-gdbus-client:
      
      ==32642== Invalid read of size 4
      ==32642==    at 0x690D0A6: dbus_connection_ref (in
      /lib/i386-linux-gnu/libdbus-1.so.3.7.6)
      ==32642==    by 0x804CEDB: message_dispatch (mainloop.c:73)
      ==32642==    by 0x684580E: g_timeout_dispatch (gmain.c:4450)
      ==32642==    by 0x6844A75: g_main_context_dispatch (gmain.c:3065)
      ==32642==    by 0x6844E14: g_main_context_iterate.isra.23 (gmain.c:3712)
      ==32642==    by 0x68452FA: g_main_loop_run (gmain.c:3906)
      ==32642==    by 0x804C7D3: client_connect_disconnect
      (test-gdbus-client.c:188)
      ==32642==    by 0x6868DB2: g_test_run_suite_internal (gtestutils.c:2067)
      ==32642==    by 0x6868F8D: g_test_run_suite_internal (gtestutils.c:2138)
      ==32642==    by 0x6869320: g_test_run_suite (gtestutils.c:2189)
      ==32642==    by 0x686936B: g_test_run (gtestutils.c:1508)
      ==32642==    by 0x696D4D2: (below main) (libc-start.c:226)
      ==32642==  Address 0x709c6e4 is 140 bytes inside a block of size 144
      free'd
      ==32642==    at 0x67E806C: free (in
      /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
      ==32642==    by 0x692D62E: dbus_free (in
      /lib/i386-linux-gnu/libdbus-1.so.3.7.6)
      ==32642==    by 0x690E1C2: ??? (in
      /lib/i386-linux-gnu/libdbus-1.so.3.7.6)
      ==32642==    by 0x804AAEC: destroy_context (test-gdbus-client.c:104)
      ==32642==    by 0x6868DB2: g_test_run_suite_internal (gtestutils.c:2067)
      ==32642==    by 0x6868F8D: g_test_run_suite_internal (gtestutils.c:2138)
      ==32642==    by 0x6869320: g_test_run_suite (gtestutils.c:2189)
      ==32642==    by 0x686936B: g_test_run (gtestutils.c:1508)
      ==32642==    by 0x696D4D2: (below main) (libc-start.c:226)
      0b2e4b1d
    • Anderson Lizardo's avatar
      gdbus: Fix memory leak · aa1aea88
      Anderson Lizardo authored
      data->conn and data->path must be destroyed before freeing "data".
      aa1aea88
  5. 11 Nov, 2013 1 commit
  6. 14 Oct, 2013 2 commits
    • Szymon Janc's avatar
      gdbus: Remove not needed check for NULL DBusPendingCall · 51ca79bd
      Szymon Janc authored
      It is now checked by g_dbus_send_message_with_reply() so there is no
      need to double check that in caller.
      51ca79bd
    • Szymon Janc's avatar
      gdbus: Check for NULL DBusPendingCall in g_dbus_send_message_with_reply · c8c3b9fc
      Szymon Janc authored
      "Warning: if the connection is disconnected or you try to send Unix file
      descriptors on a connection that does not support them, the
      DBusPendingCall will be set to NULL, so be careful with this."
      
      Check this in g_dbus_send_message_with_reply so that callers don't need
      to double check for NULL if g_dbus_send_message_with_reply returned
      TRUE.
      
      This also fix crash if passing FD over D-Bus is blocked e.g. by SELinux
      policy.
      
      bluetoothd[1894]: profiles/audio/avdtp.c:session_cb()
      bluetoothd[1894]: profiles/audio/avdtp.c:avdtp_parse_cmd() Received
          SET_CONFIGURATION_CMD
      bluetoothd[1894]: profiles/audio/a2dp.c:endpoint_setconf_ind() Source
          0x6c5000: Set_Configuration_Ind
      bluetoothd[1894]: profiles/audio/avdtp.c:avdtp_ref() 0x6df360: ref=1
      bluetoothd[1894]: profiles/audio/a2dp.c:setup_ref() 0x6d32b0: ref=1
      process 1894: arguments to dbus_pending_call_set_notify() were incorrect,
           assertion "pending != NULL" failed in file dbus-pending-call.c line
           636.
      This is normally a bug in some application using the D-Bus library.
      c8c3b9fc
  7. 12 Sep, 2013 6 commits
    • Luiz Augusto von Dentz's avatar
      gdbus/client: Use g_dbus_add_properties_watch to track properties · 4b80086a
      Luiz Augusto von Dentz authored
      This make the handling much simpler and avoids duplicates of the same
      match rule.
      4b80086a
    • Luiz Augusto von Dentz's avatar
      gdbus/client: Use g_dbus_add_signal_watch to track signals · 5edf298e
      Luiz Augusto von Dentz authored
      This make the handling much simpler and avoids duplicates of the same
      match rule.
      5edf298e
    • Luiz Augusto von Dentz's avatar
      gdbus/client: Use g_dbus_add_service_watch to track services · 39d94b1a
      Luiz Augusto von Dentz authored
      This make the handling much simpler and avoids duplicates of the same
      match rule.
      39d94b1a
    • Luiz Augusto von Dentz's avatar
      gdbus/watch: Fix crash when disconnecting from D-Bus · 6536eacf
      Luiz Augusto von Dentz authored
      When disconnecting from D-Bus a message could be recieved with no sender:
      Invalid read of size 1
         at 0x4A09EE1: strcmp (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
         by 0x3B03C386B8: g_str_equal (in /usr/lib64/libglib-2.0.so.0.3600.3)
         by 0x4065D6: message_filter (watch.c:529)
         by 0x3B0700F9E5: dbus_connection_dispatch (in /usr/lib64/libdbus-1.so.3.7.4)
         by 0x4052E7: message_dispatch (mainloop.c:76)
         by 0x3B03C48962: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
         by 0x3B03C47E05: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3600.3)
         by 0x3B03C48157: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
         by 0x3B03C48559: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3600.3)
         by 0x4038C5: client_proxy_removed (test-gdbus-client.c:902)
         by 0x3B03C6B566: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
         by 0x3B03C6B6E5: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
       Address 0x0 is not stack'd, malloc'd or (recently) free'd
      6536eacf
    • Luiz Augusto von Dentz's avatar
      gdbus/watch: Fix aborting when removing D-Bus filter · 3b321a69
      Luiz Augusto von Dentz authored
      In case of filter_data having a watch to a service name it may call
      dbus_connection_remove_filter twice causing libdbus to abort:
      
      process 24723: Attempt to remove filter function 0x4063e0 user data (nil), but no such filter has been added
      
      To fix this the code will now only attempt to call
      dbus_connection_remove_filter once in filter_data_free which is the
      counterpart of filter_data_get where dbus_connection_add_filter is called.
      3b321a69
    • Luiz Augusto von Dentz's avatar
      gdbus/watch: Fix crash when g_dbus_remove_watch is called from connect callback · 54505524
      Luiz Augusto von Dentz authored
       at 0x40570C: update_service (watch.c:601)
       by 0x40584B: service_reply (watch.c:627)
       by 0x3B0700C511: ??? (in /usr/lib64/libdbus-1.so.3.7.4)
       by 0x3B0700F740: dbus_connection_dispatch (in /usr/lib64/libdbus-1.so.3.7.4)
       by 0x405167: message_dispatch (mainloop.c:76)
       by 0x3B03C48962: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
       by 0x3B03C47E05: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3600.3)
       by 0x3B03C48157: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
       by 0x3B03C48559: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3600.3)
      Address 0x4c58a30 is 32 bytes inside a block of size 56 free'd
       at 0x4A074C4: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
       by 0x3B03C4D9AE: g_free (in /usr/lib64/libglib-2.0.so.0.3600.3)
       by 0x406102: filter_data_remove_callback (watch.c:378)
       by 0x405FC0: g_dbus_remove_watch (watch.c:798)
       by 0x40A22B: g_dbus_client_unref (client.c:1227)
       by 0x40570B: update_service (watch.c:599)
       by 0x40584B: service_reply (watch.c:627)
      54505524
  8. 11 Sep, 2013 4 commits
    • Luiz Augusto von Dentz's avatar
      gdbus: Fix emitting PropertiesChanged twice · d2dcaf4b
      Luiz Augusto von Dentz authored
      This fixes double emission of PropertiesChanged introduced by flushing
      changes, the flushing can happen during the pending processing so the
      pending_prop flag needs to be updated in the beginning and the list of
      properties can be freed before g_dbus_send_message as it is not required
      anymore.
      d2dcaf4b
    • Luiz Augusto von Dentz's avatar
      gdbus: Avoid calling dbus_connection_send* · df70ce1c
      Luiz Augusto von Dentz authored
      dbus_connection_send* should not be called directly except by
      g_dbus_send_message.
      df70ce1c
    • Luiz Augusto von Dentz's avatar
      gdbus: Add g_dbus_send_message_with_reply · 93036be1
      Luiz Augusto von Dentz authored
      g_dbus_send_message_with_reply flushes pending signals before calling
      dbus_connection_send_with_reply so it does not alter the message order
      93036be1
    • Luiz Augusto von Dentz's avatar
      gdbus: Fix sending ObjectManager/Properties signals out of order · 82dfe6a7
      Luiz Augusto von Dentz authored
      In some cases the order of the messages is altered when a message is
      sent without processing the pending signals first, currently this affect
      client_check_order unit test:
      
      /gdbus/client_check_order: **
      ERROR:unit/test-gdbus-client.c:795:property_check_order: assertion failed: (g_strcmp0(string, "value1") == 0)
      
      As can be observed the value of the property is not yet updated because the
      signal it is still pending, once this fix is applied the test pass:
      
      /gdbus/client_check_order: OK
      
      Note that the flushing only works when g_dbus_send_message is used so
      places where dbus_connection_send and other variants are called directly
      may still change the order.
      82dfe6a7
  9. 19 Jun, 2013 1 commit
    • Henrique Dante de Almeida's avatar
      gdbus: Remove proxies when client disconnects · c8cd6062
      Henrique Dante de Almeida authored
      Remove proxies and generate proxy_removed callbacks even when there are
      no corresponding InterfaceRemoved signals.
      
      This patch fixes having zombie gdbus proxy object when a server
      disconnects without sending InterfaceRemoved signals. These objects
      may interact with new server instances, for example, making
      InterfaceAdded signals of new objects with the same name be filtered
      out as duplicated, or staying allocated, but unused, if the new server
      doesn't reuse the object paths. Note that as a side-effect, the
      lifetime of a gdbus proxy becomes stricter: it lives at most for the
      duration of a single connection to a single instance of a server
      process.
      c8cd6062
  10. 08 May, 2013 2 commits
    • Anderson Lizardo's avatar
      gdbus: Fix using NULL DBusPendingCall when disconnected from D-Bus · 936e7d20
      Anderson Lizardo authored
      From D-Bus documentation for dbus_connection_send_with_reply():
      
      "Warning: if the connection is disconnected or you try to send Unix file
      descriptors on a connection that does not support them, the
      DBusPendingCall will be set to NULL, so be careful with this."
      
      Fix these errors when killing D-Bus daemon with the client still
      running:
      
      process 5712: arguments to dbus_pending_call_set_notify() were
      incorrect, assertion "pending != NULL" failed in file
      ../../dbus/dbus-pending-call.c line 596.
      This is normally a bug in some application using the D-Bus library.
      process 5712: arguments to dbus_pending_call_unref() were incorrect,
      assertion "pending != NULL" failed in file
      ../../dbus/dbus-pending-call.c line 572.
      This is normally a bug in some application using the D-Bus library.
      936e7d20
    • Anderson Lizardo's avatar
      gdbus: Fix segfault when D-Bus daemon exits · 7564e804
      Anderson Lizardo authored
      Fix this crash if D-Bus exits while the client is still connected to it:
      
      ==5570== Invalid read of size 1
      ==5570==    at 0x402D28E: strcmp (in
      /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
      ==5570==    by 0x4070E22: g_str_equal (ghash.c:1704)
      ==5570==    by 0x8055F61: message_filter (client.c:1123)
      ==5570==    by 0x4141500: dbus_connection_dispatch (in
      /lib/i386-linux-gnu/libdbus-1.so.3.5.8)
      ==5570==    by 0x80506F7: message_dispatch (mainloop.c:76)
      ==5570==    by 0x4081A7E: g_timeout_dispatch (gmain.c:3882)
      ==5570==    by 0x4080D85: g_main_context_dispatch (gmain.c:2539)
      ==5570==    by 0x4081124: g_main_context_iterate.isra.21 (gmain.c:3146)
      ==5570==    by 0x408156A: g_main_loop_run (gmain.c:3340)
      ==5570==    by 0x41BF4D2: (below main) (libc-start.c:226)
      ==5570==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
      ==5570==
      ==5570==
      7564e804
  11. 04 May, 2013 1 commit
    • Luiz Augusto von Dentz's avatar
      gdbus: Fix calling GetManagedObjects twice in a row · 2a06210b
      Luiz Augusto von Dentz authored
      Calling g_dbus_client_new followed by g_dbus_client_set_proxy_handlers
      cause two calls to GetManagedObjects in a row as GetNameOwner reply is
      asyncronously it triggers the second call because the handlers have
      been set by g_dbus_client_set_proxy_handlers.
      2a06210b
  12. 09 Apr, 2013 2 commits
    • Lucas De Marchi's avatar
      gdbus: Use gcc builtin instead of g_atomic · 33999f18
      Lucas De Marchi authored
      g_atomic_* end up using G_STATIC_ASSERT, causing gcc 4.8 to yell due to
      -Wunused-local-typedefs.
      
      gdbus/client.c: In function ‘g_dbus_client_ref’:
      /usr/include/glib-2.0/glib/gmacros.h:162:53: error: typedef ‘_GStaticAssertCompileTimeAssertion_2’ locally defined but not used [-Werror=unused-local-typedefs]
       #define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1]
      33999f18
    • Luiz Augusto von Dentz's avatar
      gdbus: Fix not calling property_changed callback · 3d6483cd
      Luiz Augusto von Dentz authored
      In case a property did not appear by the time proxy_added was called
      property_changed has to be called if it appear latter otherwise the
      application will be unaware of it.
      3d6483cd
  13. 23 Feb, 2013 1 commit
  14. 15 Feb, 2013 1 commit
  15. 14 Feb, 2013 1 commit
  16. 11 Feb, 2013 1 commit
  17. 01 Feb, 2013 1 commit
    • Johan Hedberg's avatar
      gdbus: Fix unpublished interface signal emission · 6ba49d96
      Johan Hedberg authored
      If we haven't published an interface yet (i.e. it's in the data->added
      list), we should just ignore any property changed indications as the
      values for the properties will anyway be part of the InterfacesAdded
      signal.
      6ba49d96
  18. 21 Jan, 2013 1 commit
  19. 06 Jan, 2013 1 commit
    • Anderson Lizardo's avatar
      gdbus: Fix memory leak on properties_set() · 099ee6eb
      Anderson Lizardo authored
      The pointer returned by dbus_message_iter_get_signature() must be freed
      with dbus_free().
      
      Fixes this memory leak:
      
      ==1857== 16 bytes in 1 blocks are definitely lost in loss record 104 of
      251
      ==1857==    at 0x402BF52: realloc (in
      /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
      ==1857==    by 0x415E286: dbus_realloc (in
      /lib/i386-linux-gnu/libdbus-1.so.3.5.8)
      ==1857==    by 0x415E70B: ??? (in
      /lib/i386-linux-gnu/libdbus-1.so.3.5.8)
      ==1857==    by 0x415F17B: ??? (in
      /lib/i386-linux-gnu/libdbus-1.so.3.5.8)
      ==1857==    by 0x414CB33: dbus_message_iter_get_signature (in
      /lib/i386-linux-gnu/libdbus-1.so.3.5.8)
      ==1857==    by 0x8053239: properties_set (object.c:899)
      ==1857==    by 0x5FFFFF: ???
      ==1857==
      099ee6eb
  20. 05 Jan, 2013 1 commit
  21. 04 Jan, 2013 2 commits
    • Lucas De Marchi's avatar
      gdbus: Don't include just added interfaces in GetManagedObjects · 122c3f6a
      Lucas De Marchi authored
      If we received a call to ObjectManager.GetManagedObject we should not
      include in the response the interfaces in data->added. This is because
      it's not guaranteed that those interfaces will trigger an
      InterfacesAdded signal, which is the case if the interface is removed in
      the same mainloop iteration.
      122c3f6a
    • Lucas De Marchi's avatar
      gdbus: Simplify generated introspection · 8f70c8d7
      Lucas De Marchi authored
      The generated introspection is not supposed to be read as is by human,
      so there's no point in printing the indentation or writing more code to
      use auto-close tags.
      
      If it's desired to read the raw xml file, user can always use other
      tools to transform the output such as "xmllint --format".
      
      This also fixes a missing </property> when property is deprecated.
      8f70c8d7
  22. 02 Jan, 2013 1 commit