Giter Club home page Giter Club logo

dleyna-renderer's Introduction

DISCONTINUATION OF PROJECT.

This project will no longer be maintained by Intel.

Intel will not provide or guarantee development of or support for this project, including but not limited to, maintenance, bug fixes, new releases or updates.

Patches to this project are no longer accepted by Intel.

If you have an ongoing need to use this project, are interested in independently developing it,
or would like to maintain patches for the community, please create your own fork of the project.

Introduction:
-------------

TODO

Compilation
------------

TODO

Working with the source code repository
---------------------------------------

dleyna-renderer can be downloaded, compiled and installed as
follows:

   Clone repository
     # git clone git://github.com/01org/dleyna-renderer.git
     # cd dleyna-renderer

   Configure and build
     # ./autogen.sh
     # make

   Final installation
     # sudo make install

These instructions are suitable for users who simply want to install
and run dleyna-renderer.  However, developers wishing to contribute
to the project should follow a separate "Configure and build" step.

   Configure and build
     # ./bootstrap-configure
     # make

The script "bootstrap-configure" cleans the repository, calls
autreconf and then invokes configure with proper settings for
development.  These settings include the enabling of
maintainer mode and debugging.

Developers can remove autogenerated files with the following command

     # make maintainer-clean

Configure Options:
------------------

--enable-werror

This option is disabled by default.  To enable use --enable-werror.
When enabled, all warnings are treated as errors during compilation.
Should be enabled during development to ensure that errors do not
creep into the code base.  This option is enabled by
bootstrap-configure.

--enable-debug

This option is disabled by default.  To enable use
--enable-debug. When enabled, the make files produce debug builds.
This option is enabled by bootstrap-configure.

--enable-optimization

This option is enabled by default. To disable use
--disable-optimization. When enabled it turns on compiler
optimizations. Disable = -O0, enable = -O2.

--enable-never-quit

This option is disabled by default.  To enable use --enable-never-quit.
When enabled, dleyna-renderer-service doesn't quit when the last
client disconnects.

--with-log-type

See logging.txt for more information about logging.

--with-log-level

See logging.txt for more information about logging.

--with-connector-name

Set the IPC mechanism to be used.

--enable-lib-only

This option is disabled by default. To enable use --enable-lib-only.
When enabled, only the libdleyna-renderer library is built.

--with-ua-prefix

This option allows a prefix to be added to the SOUP session user agent.
For example, --with-ua-prefix=MyPrefix can be used to change a default user
agent string from "dLeyna/0.0.1 GUPnP/0.19.4 DLNADOC/1.50" to
"MyPrefix dLeyna/0.0.1 GUPnP/0.19.4 DLNADOC/1.50".

dleyna-renderer's People

Contributors

allisonkarlitskaya avatar cguiraud avatar debarshiray avatar em- avatar jku avatar lferrandis avatar ljsachs avatar puleglot avatar rdower avatar rsbells avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dleyna-renderer's Issues

Make object paths stable across restarts (of dleyna-renderer and of the DMR)

Currently DMRes are identified by sequential integers which depends on the order they're first seen by dleyna-renderer (eg. /com/intel/dLeynaRenderer/server/2).

This means that it will be impossible to keep persistent references to objects across DMR or dleyna-renderer restarts, as media items will have paths like /com/intel/dLeynaRenderer/server/2/3034306130393764373063393261313636623936616133623835663332306334.

To address this we could use the udn as stable server identifier, eg. /com/intel/dLeynaRenderer/server/uuid/6da19ece-c964-4094-a2bd-84249e8c7da6.

To also allow for more compact and closer to the original representation of the media item identifiers something like tp_escape_as_identifier() could be employed, escaping only invalid characters instead of always doubling the required string length as done by prv_id_to_object_name().

(Text based on intel/dleyna-server#119)

Need to check output parameters of gupnp_service_proxy_end_action

The problem is that although UPnP servers are obliged to provide all the output parameters specified for a method in the SCPD, they don't always do this. Our code assumes that if this happens, GUPnP will return an error. Unfortunately, it does not. It simply issues a warning to the logs. This can mean that gupnp_service_proxy_end_action can return true without initialising our output parameters.

A bug (https://bugzilla.gnome.org/show_bug.cgi?id=69709) has been entered in GUPnP on this. However, as the fix would require a slight change to the behaviour of an API, the bug will not be fixed any time soon. So we'll need to fix this ourselves in dLeyna-renderer, by initialising parameters to default values and checking them. A similar bug has been entered for dLeyna-server.

intel/dleyna-server#49

dlr_async_task_complete cleanup

This function is always called in a g_idle_add
Check if needed, and move g_idle_add inside the function
If not needed, remove all g_idle_add

Unsubscribe requests are not sent when dleyna-renderer-service exits

This issue is described in the old media-service-upnp issues database:

01org/renderer-service-upnp#92

It is fixed in two separate commits

01org/renderer-service-upnp@f66f468445f1f7e7f189c397d366ca4535d9858d

and

01org/renderer-service-upnp@df7378e9c06a0dba90ac0c9ef84c6d34fb0c2af6

The fixes just need to be forward ported.

dLeyna renderer can crash if renderer dissapears (7.2.8.4,6)

This crash happens if dLeyna-renderer is in the process of retrieving the introspection data for a service when the corresponding renderer disapears from the network. The problem is that we retrieve the introspection data using gupnp_service_info_get_introspection. This is a synchronous function that blocks until the introspection data has been returned or there is an error. The problem is that this function iterates the main loop. So if a renderer disappears, prv_server_unavailable_cb is called and the renderer object is deleted. When gupnp_service_info_get_introspection returns to a function such as prv_get_av_service_states_values, the proxy used to retrieve the introspection data is invalid, but prv_get_av_service_states_values has no way of knowing this.

To fix this problem properly we really need to be able to cancel gupnp_service_info_get_introspection, which means adding a new function to GUPnP.

This bug causes a failure on the DLNA test 7.2.8.4,6

Stop the player on RemoveFile() if it is currently playing the to-be-removed media

Suppose we share a music file with a DMR by calling HostFile() and OpenUri().

If we want to stop sharing the file it would be nice to properly stop the player before removing the file, but it should be done only if it is really playing the served file: we should not stop it if it already moved to another track.

This should be done by the DBus service, as it should already track the status of the player and would avoid replicating the logic in every application.

Add a Rescan method to com.intel.dLeynaRenderer.Manager

The intention here is to initiate a rescan to discover new DMRs on the network or to determine that existing DMRs are no longer available. Strictly speaking this shouldn't be necessary but I guess it's possible that SSDP packets can get lost or not processed and some misbehaving servers don't always send BYE events.

The good news is that as of version 0.14.0, GSSDP has a rescan method so it should be trivial to implement this.

Make error string single line

In some files, error string are split to avoid to be over 80 chars long.
This is the exception. To be able to search error string in source code, they must not be split.

Wrong priority information in DLNAQOS field (IEEE 802.3 Q) (should be 0 or 1)

Setup:

* gssdp 0.14.1: 35cd6c5
* gupnp 0.20.0: 5765f46
* gupnp-av 0.12.0: 71806e4
* gupnp-dlna 0.9.5: fed5da3
* media-service-upnp 0.5: 0dbc74a
* render-service-upnp 0.3.1: 8b6ab83
* cloudeebus: 1ed7b8b
* cloud-dleyna: 00c8ed7

Pre-conditions

  • Device Under Test (Cloud-dleyna) and CTT are both connected via WiFi to a router witth DHCP server (see DLNA test setup from TestDocumentation.pdf page 5)
  • Launch Cloudeebus and cloud-dleyna
  • Launch CTT DLNA
  • When creating the DMC profile check option "802.3" in "Networking and connectivity"

Requirement level is: "Must support"

Steps:

1 Launch test 7.2.36.1 DDC DLNAQOS Support:ย  Uses DLNAQOS_1 or Less (CP)
2 Wait result

Actual result:

2 Test result is "NA"

Expected result:

4 Test result is Pass

We respond "HTTP code 200 - OK" instead of 412 to an event with a blank SID

Setup:

* gssdp 0.14.1: 35cd6c5
* gupnp 0.20.0: 5765f46
* gupnp-av 0.12.0: 71806e4
* gupnp-dlna 0.9.5: fed5da3
* media-service-upnp 0.5: 0dbc74a
* render-service-upnp 0.3.1: 8b6ab83
* cloudeebus: 1ed7b8b
* cloud-dleyna: 00c8ed7

Pre-conditions

  • Device Under Test (Cloud-dleyna) and CTT are both connected via WiFi to a router witth DHCP server (see DLNA test setup from TestDocumentation.pdf page 5)
  • Launch Cloudeebus and cloud-dleyna
  • Launch CTT DLNA

Requirement level is: "Should support"

Steps:

1 Launch test 7.2.16.1 DDC UPnP Error Codes: Verification of Proper Error Code Usage
2 Wait result

Actual result:

2 Test result is "Warning"

Expected result:

4 Test result is Pass

Rename GetServers() and related signals by GetRenderers() and related

In the root Object, interface com.intel.dLeynaRenderer.Manager, we have currently one function and 2 signals where naming is related to server and not renderer.
We should rename them accordingly:

Function:
GetServers() -> GetRenderers()

Signals:
FoundServer -> FoundRenderer
LostServer -> LostRenderer

All testing app should be updated accordingly (test, cloud-dleyna, etc)

We respond "404 - Not Found" instead of "200 - OK" to some Notify Events depending on their size

Setup:

* gssdp 0.14.1: 35cd6c5
* gupnp 0.20.0: 5765f46
* gupnp-av 0.12.0: 71806e4
* gupnp-dlna 0.9.5: fed5da3
* media-service-upnp 0.5: 0dbc74a
* render-service-upnp 0.3.1: 8b6ab83
* cloudeebus: 1ed7b8b
* cloud-dleyna: 00c8ed7

Pre-conditions

  • Device Under Test (Cloud-dleyna) and CTT are both connected via WiFi to a router witth DHCP server (see DLNA test setup from TestDocumentation.pdf page 5)
  • Launch Cloudeebus and cloud-dleyna
  • Launch CTT DLNA

Requirement level is: "Must support"

Steps:

1 Launch test 7.2.17.1 DDC UPnP Device Architecture: GENA Packet Size
2 Wait result

Actual result:

2 Test result is Fail
Device did not respond properly to NOTIFY event

Expected result:

4 Test result is Pass

Seeking is totally messed up (particularly Byte Seeking)

Looking at the code I see the following issues but there may be more:

In device.c:

  1. dlr_device_set_position is incorrectly implemented. It should use REL_TIME for time based Seeking and the DLNA Byte Seeking unit for Byte Seeking.
  2. dlr_device_seek is incorrectly implemented. It should be implemented by retrieving the current position, adding it to the delta specified in Seek, and then calling dlr_device_set_position. Recall, that MPRIS Seek and SetPosition functions both operate on the current track and not the media. Therefore, we should never use the ABS units to implement these functions. If we need to be able to send ABS units for certification, we'll need to introduce a new method.
  3. The BytePosition property is incorrectly computed. It's value is provided by a DLNA specific action and not GetPositionInfo.

Please, run through the certification tests after fixing this issue to ensure we haven't removed anything that is really needed.

We can remove content being rendered

Setup:

SYSTEM
Description: Ubuntu 12.10
Codename: quantal
Distributor ID: Ubuntu
Release: 12.10
Mozilla Firefox 18.0.2

PACKAGES LIST
gssdp-1.0 v0.14.2
gupnp-1.0 v0.20.3
gupnp-av-1.0 v0.12.1
gupnp-dlna-2.0 v0.10.2
dleyna-core-1.0 v0.0.2
dleyna-renderer-1.0 v0.0.2
dleyna-server-1.0 v0.0.2
dleyna-server-service-1.0 v0.0.2
dleyna-renderer-service-1.0 v0.0.2
Cloudeebus version 0.3.1

REPOSITORIES

  • COMPONENT: gssdp
  • REPOSITORY: git://git.gnome.org/
  • TAG: HEAD

- COMMIT ID: 6384b03f11282bfce08f7463db026f6dbbc30c72

  • COMPONENT: gupnp
  • REPOSITORY: git://git.gnome.org/
  • TAG: HEAD

- COMMIT ID: 4870e0488a3f79ca48b0f6b2c558b3aa13425d24

  • COMPONENT: gupnp-av
  • REPOSITORY: git://git.gnome.org/
  • TAG: HEAD

- COMMIT ID: 6f3a016df59c5b827a0f2bbd72e4ca6b49674325

  • COMPONENT: gupnp-dlna
  • REPOSITORY: git://git.gnome.org/
  • TAG: HEAD

- COMMIT ID: 71d12378ed9699bb6c54154d292d99e30032111f

  • COMPONENT: dleyna-core
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: a2c581bd17d44662ab0e635228a6567226d99650

  • COMPONENT: dleyna-renderer
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: b786e09

  • COMPONENT: dleyna-server
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: 636125db7bc64368843b5db1314ab9b09d11af31

  • COMPONENT: dleyna-connector-dbus
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: d53eba90bf4eb3192a79cf1cd003072d3bf50753

  • COMPONENT: cloud-dleyna
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: a5ddb997f235541485d47e613ea5ad39b6f6077d

  • COMPONENT: cloudeebus
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD
  • COMMIT ID: dc19f52ce436c1ca86fa30f3c90a8e090aa5ac9f

Preconditions:

  • Launch Cloudeebus and Cloud-dleyna
  • Launch Rygel (I launched it from Tizen IVI)
  • Rygel shares audio content
  • Use any renderer (I used TV Sony Bravia)

Steps:

1 Using the DMC (Cloud dLeyna), discover the DMR (TV Sony Bravia) and DMS (Rygel on NDiS166)
2 Using the DMC, select and browse through the DMS
3 Using the DMC, pre-select the DMR
4 Using the DMC, playback one audio content
5 Using the DMC, remove the audio content
6 Using the DMC, pause and play playback of the content
7 Using the DMC, stop playback of the content
8 Using the DMC, play again playback of the content

Actual result:

5 File is removed successfully
6 We can pause rendering the content and resume playback from the pause operation
7 We can stop rendering
8 Renderer (Tv Sony Bravia) displays "file not found"

Expected result:

We should maybe stop the rendering at step 5 ?

dLeyna-renderer generates incorrect PUSH URLs

They are prefixed with "/rendererserviceupnp" when they should probably be prefixed with "/dleynarenderer", e.g.,

http://127.0.0.1:55423/rendererserviceupnp/0.desktop

We just need to change

define DLR_HOST_SERVICE_ROOT "/rendererserviceupnp"

in host-service.c

Use GUPnP Mime Type if available

When dLeyna-renderer hosts a file, it first asks GLib to determine the mime type of the file. This mime type is then used to set the Content Type header in responses to HTTP get requests. dLeyna-renderer also uses gupnp-dlna to compute the DLNA profile of the file being hosted. However, there is a potential problem here as there could be a mismatch between the DLNA profile computed by gupnp-dlna and the mime type computed by glib, particularly if the shared-mime-info database is not available on the target platform. Therefore, it would be better if dLeyna-renderer used the mime type reported by GUPnP-DLNA when available. If not available it could fall back to g_content_type_guess. This will ensure that our mime types and dlna profiles are always in sync and that dLeyna-renderer can provide a mime type even if the shared mime type database is not installed on a device.

SetNextAVTransportURI action

To execute a DLNA CTT test case:
7.3.101.10 MM Metadata Reporting: CurrentURIMetaData Syntax

In this test, we must issue a SetNextAVTransportURI action.
The goal is to validate we are tolerant of valid DIDL-Lite metadata that is conformant to DLNA restrictions.

The requirement Level is "Must support".

Crash calling com.intel.dLeynaRenderer.RendererDevice.GetIcon()

The following GetIcon() invocation with a local Rygel DMR available crashes dleyna-renderer-service:

$ gdbus call -e -o /com/intel/dLeynaRenderer/server/0 -d com.intel.dleyna-renderer -m com.intel.dLeynaRenderer.RendererDevice.GetIcon ""

And this is the backtrace I've got:


0x00007ffff7dbcbd2 in g_type_check_instance (type_instance=0x45c2b0) at gtype.c:4082
4082          TypeNode *node = lookup_type_node_I (type_instance->g_class->g_type);
gdb g_type_check_instance()
> bt full
#0  0x00007ffff7dbcbd2 in g_type_check_instance (type_instance=0x45c2b0) at gtype.c:4082
        node = 0x7ffff7da23f9 <g_object_unref+243>
#1  0x00007ffff7db17a9 in g_signal_handlers_disconnect_matched (instance=0x45c2b0, mask=(G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), signal_id=0x0, detail=0x0, closure=0x0, func=0x7ffff6d78cc3 <queue_message_restarted>, data=0x47e700) at gsignal.c:2874
        n_handlers = 0x0
        __PRETTY_FUNCTION__ = "g_signal_handlers_disconnect_matched"
#2  0x00007ffff6d790d9 in soup_message_queue_item_unref (item=0x47e700) at soup-message-queue.c:181
        __PRETTY_FUNCTION__ = "soup_message_queue_item_unref"
#3  0x00007ffff6d793bb in soup_message_queue_next (queue=0x47b820, item=0x47e700) at soup-message-queue.c:280
        next = 0x0
#4  0x00007ffff6d8754a in async_run_queue (session=0x44f390) at soup-session.c:1884
        priv = 0x44f2a0
        item = 0x47e700
        msg = 0x45c2b0
        try_cleanup = 0x1
        should_cleanup = 0x0
#5  0x00007ffff6d87650 in idle_run_queue (user_data=0x44f2a0) at soup-session.c:1928
        priv = 0x44f2a0
        source = 0x49db90
        __PRETTY_FUNCTION__ = "idle_run_queue"
#6  0x00007ffff7c8bb1f in g_idle_dispatch (source=0x49db90, callback=0x7ffff6d875a0 <idle_run_queue>, user_data=0x44f2a0) at gmain.c:5209
No locals.
#7  0x00007ffff7c8939d in g_main_dispatch (context=0x40df50) at gmain.c:3058
        dispatch = 0x7ffff7c8bad3 <g_idle_dispatch>
        was_in_call = 0x0
        user_data = 0x44f2a0
        callback = 0x7ffff6d875a0 <idle_run_queue>
        cb_funcs = 0x7ffff7d83dc0 <g_source_callback_funcs>
        cb_data = 0x471500
        need_destroy = 0x40e1d0
        current_source_link = {
          data = 0x49db90, 
          next = 0x0
        }
        source = 0x49db90
        current = 0x7ffff0001ba0
        i = 0x0
        __PRETTY_FUNCTION__ = "g_main_dispatch"
#8  0x00007ffff7c8a102 in g_main_context_dispatch (context=0x40df50) at gmain.c:3634
No locals.
#9  0x00007ffff7c8a2f2 in g_main_context_iterate (context=0x40df50, block=0x1, dispatch=0x1, self=0x42da60) at gmain.c:3705
        max_priority = 0x0
        timeout = 0x0
        some_ready = 0x1
        nfds = 0xa
        allocated_nfds = 0xe
        fds = 0x4704b0
#10 0x00007ffff7c8a722 in g_main_loop_run (loop=0x444080) at gmain.c:3899
        self = 0x42da60
        __PRETTY_FUNCTION__ = "g_main_loop_run"
#11 0x00007ffff7ff4497 in dleyna_main_loop_start (server=0x400fb4 "dleyna-renderer-service", control_point=0x7ffff7e14c40 <g_control_point>, user_data=0x0) at libdleyna/core/main-loop.c:153
        retval = 0x1
#12 0x0000000000400eea in main (argc=0x1, argv=0x7fffffffd728) at daemon.c:93
        mask = {
          __val = {0x4002, 0x0 <repeats 15 times>}
        }
        retval = 0x1

Add GotoTrack() player method

This issue is described in the old renderer-service-upnp issues database:

01org/renderer-service-upnp#101

It is fixed in commit:

01org/renderer-service-upnp@8b6ab831433b6883b9857fa3456e690af29696b7

The fixes just need to be forward ported.

Use file descriptors passing in DleynaRenderer.PushHost.HostFile()

Passing a fd for the file to be shared would be preferable over passing its path on the filesystem:

  • process privileges can be more easily contained, since the DBus process would no longer require any arbitrary filesystem access
  • temporary files can be unlinked before being passed over DBus, so that they will get automatically cleaned up as soon as the DBus service closes the fd
  • sometimes you end up with file:// URIs, sidestepping the issue of passing the local file paths vs.the full file:// URI would be nice

The client may have also the chance to explicitly request a specific name for the exported file, which may or may not match the name of the original file, or let the DBus service generate one. This additional metadata may also let the application specify the proper mimetype for the file to be shared (a{sv} dicts are often used for this kind of purposes).

HostFile() could then return a DBus object that has to be passed back to RemoveFile(): having a way list those object would also let applications know which files are currently shared.

Error trying to parse the CurrentURIMetaData from AVT:SetAVTransportURI method invocation

Setup:

* gssdp 0.14.1: 35cd6c5
* gupnp 0.20.0: 5765f46
* gupnp-av 0.12.0: 71806e4
* gupnp-dlna 0.9.5: fed5da3
* media-service-upnp 0.5: 0dbc74a
* render-service-upnp 0.3.1: 8b6ab83
* cloudeebus: 1ed7b8b
* cloud-dleyna: 00c8ed7

Pre-conditions

  • Device Under Test (Cloud-dleyna) and CTT are both connected via WiFi to a router witth DHCP server (see DLNA test setup from TestDocumentation.pdf page 5)
  • Launch Cloudeebus and cloud-dleyna
  • Launch CTT DLNA

Steps:

1 Launch test 7.1.4.1 Ethernet QoS Tolerance
2 Select the DMR and DMS
3 Browse content
4 Select an image

Actual result:

4 Tool detects the SetAVTransportURI Action and find errors:
ERROR: Error trying to parse the CurrentURIMetaData from AVT:SetAVTransportURI method invocation
Error while parsing DIDL-Lite XML of MetaData. Root element is missing.

Expected result:

4 No error. You can render the image

Change the format of the version string

Currently, the format of the version string is x.y.z and it's provided by the autotools.

We can change the format in debug and/or release to add the commit sha1 on which the component is builded: x.y.z-sha1

We should use the short sha1 format, not the long one.

Blatant memory leak in dlr_device_new

    dlr_device_t *dev = g_new0(dlr_device_t, 1);
    prv_new_device_ct_t *priv_t;
    gchar *new_path;
    dlr_device_context_t *context;
    GUPnPServiceProxy *s_proxy;

    DLEYNA_LOG_DEBUG("New Device on %s", ip_address);

    new_path = g_strdup_printf("%s/%u", DLEYNA_SERVER_PATH, counter);
    DLEYNA_LOG_DEBUG("Server Path %s", new_path);

    dev = g_new0(dlr_device_t, 1);

Note dev is initialised twice, one at the start of the function and once about ten lines in.

Retrieve properties and service introspection data upon device discovery

The current method of only retrieving properties when ask for and retrieving service introspection data on the fly rather than at device construction complicates the code more than is needed. In addition, the method of synchronously retrieving the introspection data is causing lots of problems, see #97.

Let's fix this. There are 3 things to do

  1. Add the gupnp_service_info_get_introspection_cancel method as described here (https://bugzilla.gnome.org/show_bug.cgi?id=704867).
  2. Modify the service_task to allow us to queue calls to functions that are not gupnp actions.
  3. Retrieve service introspection data and populate the properties hash table during device construction.

Enable SOUP session User Agent Customization

This issue is described in the old renderer-service-upnp issues database

01org/renderer-service-upnp#89

It has already been fixed in renderer-service-upnp.

01org/renderer-service-upnp@a8bf9372b1d4b1373815df265267d0d13c079556

The fix just needs to be forward ported.

Valgrind reports memory corruption when Setting the Mute property

To Reproduce:

  1. Start XBMC.
  2. Start dleyna-renderer with valgrind, e.g., libtool --mode=execute valgrind --num-callers=40 server/dleyna-renderer-service
  3. cd dleyna-renderer/test/dbus
  4. python
  5. from rendererconsole import *
  6. manager = Manager()
  7. ren = Renderer("/com/intel/dLeynaRenderer/server/0")
  8. ren.set_prop("Mute","org.mpris.MediaPlayer2.Player", not ren.get_prop("Mute"))

Expected Result:

No errors in valgrind output

Actual Result:

==3297== Conditional jump or move depends on uninitialised value(s)
==3297==    at 0x533B56A: prv_rc_last_change_cb (device.c:1435)
==3297==    by 0x62E36E2: emit_notifications (gupnp-service-proxy.c:1683)
==3297==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==3297==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==3297==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==3297==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==3297==    by 0x400EBA: main (daemon.c:93)

Analysis

Valgrind is correct about the line number but the error is confusing. It reports a problem executing

mpris_volume = (double)device_volume / (double)device->max_volume;

because if you set the Mute value, the event only contains a value for mute. It does not contain a value for Volume, and so device_volume is not initialised. I don't get an error when setting Volume.

Here's the event I get when I set the Mute property

<Event xmlns="urn:schemas-upnp-org:metadata-1-0/RCS/"><InstanceID val="0"><Mute Channel="Master" val="1"/></InstanceID></Event>

Note no Volume. So I think we just need to initialise the volume in the same way as Mute.

We could set it to either MAX_UINT or device->max_volume + 1.

GetProtocolInfo() action

This issue is described in the old renderer-service-upnp issues database:

01org/renderer-service-upnp#91

It is fixed in commit:

01org/renderer-service-upnp@a756e3b976cfdddea8c9be96586d58f29eebfbbb

The fixes just need to be forward ported.

Implement org.freedesktop.DBus.ObjectManager to export the list of discovered DMRs

The org.freedesktop.DBus.ObjectManager interface does the same job that GetServers()/FoundServer/LostServer do, but in a more standardized form.

I'm not sure if implementing it on the server side using GDBusObjectManagerServer can be done without some reworking of the current connector interface, but at least on the client side it would allow me to use GDBusObjectManagerClient, simplifying the current code and likely improving perfromances.

Thanks!

A file uploaded is restricted

Setup:

::: SYSTEM
Description: Ubuntu 12.10
Codename: quantal
Distributor ID: Ubuntu
Release: 12.10
Mozilla Firefox 18.0.2

::: PACKAGES LIST
gssdp-1.0 v0.14.2
gupnp-1.0 v0.20.2
gupnp-av-1.0 v0.12.1
gupnp-dlna-2.0 v0.10.0
dleyna-core-1.0 v0.0.2
dleyna-renderer-1.0 v0.0.2
dleyna-server-1.0 v0.0.2
dleyna-server-service-1.0 v0.0.2
dleyna-renderer-service-1.0 v0.0.2
Cloudeebus version 0.3.1

::: REPOSITORIES

  • COMPONENT: gssdp
  • REPOSITORY: git://git.gnome.org/
  • TAG: HEAD

- COMMIT ID: 21128b92a9f1e8f8f5d200552843b2a61fbae973

  • COMPONENT: gupnp
  • REPOSITORY: git://git.gnome.org/
  • TAG: HEAD

- COMMIT ID: e177d2171e5cc5e564dd2c3c8aec70b38acee454

  • COMPONENT: gupnp-av
  • REPOSITORY: git://git.gnome.org/
  • TAG: HEAD

- COMMIT ID: 6f3a016df59c5b827a0f2bbd72e4ca6b49674325

  • COMPONENT: gupnp-dlna
  • REPOSITORY: git://git.gnome.org/
  • TAG: HEAD

- COMMIT ID: 5c67be7bc73f37e1ffe441a8442e238e9a97d68b

  • COMPONENT: dleyna-core
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: a2c581bd17d44662ab0e635228a6567226d99650

  • COMPONENT: dleyna-renderer
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: b786e09

  • COMPONENT: dleyna-server
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: 1e5e0bde3250af0278f3839057564ce24aa905e3

  • COMPONENT: dleyna-connector-dbus
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: d53eba90bf4eb3192a79cf1cd003072d3bf50753

  • COMPONENT: cloud-dleyna
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD

- COMMIT ID: a5ddb997f235541485d47e613ea5ad39b6f6077d

  • COMPONENT: cloudeebus
  • REPOSITORY: git://github.com/01org/
  • TAG: HEAD
  • COMMIT ID: dc19f52ce436c1ca86fa30f3c90a8e090aa5ac9f

Pre-conditions:

  • Launch cloudeebus and cloud-dleyna
  • Launch Golden DMS
  • Both connected to the same network
  • Prepare a photo e.g. "Kelibia.jpg"
  • Launch media console from a Terminal

Steps:

1 Use cloud-dleyna to upload "Kelibia.jpg" to Golden DMS as "KelibiaUploaded"
2 From media console execute command:
root.search('Type derivedfrom "image"', 0, 90, ["DisplayName","Path", "URLs","Restricted"], "-DisplayName")
3 Check the restricted property of the file uploaded

Actual result:

3 In fact I see 3 "KelibiaUploaded" with restricted set to 0 or 1

Expected result

3 Restricted should be set to 0

Info

The problem is you can't remove the file.
Cloud-dleyna displays: "Destroy Object operation failed: Restricted object (DestroyObject)"

Return the device icon as a byte array along its URL

To simplify clients even further, the device icon should be fetched and cached by the DBus services and returned as a (s:Url ay:Data s:Mimetype) tuple. This will also have the benefit that no direct network access would be needed from the application.
As an example of a DBus spec that does something similar, the Telepathy spec for retrievint avatar images for roster contacts looks like this: http://telepathy.freedesktop.org/spec/Connection_Interface_Avatars.html#Method:RequestAvatar

We don't display media with invalid metadata

Setup:

* gssdp 0.14.1: 35cd6c5
* gupnp 0.20.0: 5765f46
* gupnp-av 0.12.0: 71806e4
* gupnp-dlna 0.9.5: fed5da3
* media-service-upnp 0.5: 0dbc74a
* render-service-upnp 0.3.1: 8b6ab83
* cloudeebus: 1ed7b8b
* cloud-dleyna: 00c8ed7

Pre-conditions:

  • Device Under Test (Cloud-dleyna) and CTT are both connected via WiFi to a router with DHCP server (see DLNA test setup from TestDocumentation.pdf page 5)
  • Launch Cloudeebus and cloud-dleyna
  • Launch CTT DLNA

Requirement level is: "Must support"

Steps:

1 Launch test 7.3.17.2 MM DIDL-Lite Max Metadata Length: Length-Limited < Max-Value
2 Select the DMS created by the tool
3 Tool ask if the DUT display media
4 Answer [No]

Actual result:

2 No media is listed
4 Test is ended. Result is "NA"

Expected result:

It seems the medias should be displayed to be able to execute the next step

dleyna-renderer-service cannot push files to an XBOX

This issue is described in the old renderer-service-upnp issues database:

01org/renderer-service-upnp#87

It is fixed in commit:

01org/renderer-service-upnp@366171ce9dd1a067af313906c253e111cce5a094

The fixes just need to be forward ported.

Seek() action - byte

Needed to execute DLNA CTT test case:
7.3.156.2 Seek Behavior (Control Points): controller-byte

Mute

We need a way to mute the volume to be able to execute a test from DLNA CTT:
7.2.31.1 DDC UPnP Boolean Types: Uses 0/1 for true/false

Goal of the test is to verify that device uses "0" for false and "1" for true when using boolean type

dLeyna-renderer can crash on shutdown

Okay, so this is a little tricky to reproduce, but I managed to get dleyna-renderer to crash by quitting during device construction. I found this problem while testing PR #55 but the problem is not related to this PR. To reproduce I added a sleep(10) before the call to dlr_device_construct in dlr_device_new. I then ran dLeyna-renderer-service under valgrind and pressed CTRL-C about 2 to 3 seconds after startup, basically as soon as I saw a log announcing the discovery of a new context.

Here are some of the errors I got from valgrind

==5733== Memcheck, a memory error detector
==5733== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==5733== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==5733== Command: /home/markus/code/public/dleyna-renderer/server/.libs/lt-dleyna-renderer-service
==5733== 
dleyna-renderer-service[5733]: dLeyna version 0.0.2
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_new() --- Enter
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_new() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/log.c : dleyna_log_update_type_level() --- Type[0] Level[0x3F] Mask[0xFC] Flags[0xFF]
dleyna-renderer-service[5733]:  
dleyna-renderer-service[5733]: libdleyna/core/settings.c : dleyna_settings_new() --- Load file [/home/markus/.config/dleyna-renderer-service.conf]
dleyna-renderer-service[5733]:  
dleyna-renderer-service[5733]: libdleyna/core/settings.c : dleyna_settings_new() --- [General settings]
dleyna-renderer-service[5733]: libdleyna/core/settings.c : dleyna_settings_new() --- Never Quit: F
dleyna-renderer-service[5733]:  
dleyna-renderer-service[5733]: libdleyna/core/settings.c : dleyna_settings_new() --- Connector Name: dbus
dleyna-renderer-service[5733]:  
dleyna-renderer-service[5733]: libdleyna/core/settings.c : dleyna_settings_new() --- [Logging settings]
dleyna-renderer-service[5733]: libdleyna/core/settings.c : dleyna_settings_new() --- Log Type : 0
dleyna-renderer-service[5733]: libdleyna/core/settings.c : dleyna_settings_new() --- Log Level: 0x3F
dleyna-renderer-service[5733]:  
dleyna-renderer-service[5733]: libdleyna/core/connector-mgr.c : dleyna_connector_mgr_load() --- Enter
dleyna-renderer-service[5733]: libdleyna/core/connector-mgr.c : dleyna_connector_mgr_load() --- Exit
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_initialize() --- Enter
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_initialize() --- Exit
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_connect() --- Enter
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_connect() --- Exit
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_publish_object() --- Enter, path = </com/intel/dLeynaRenderer>
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_publish_object() --- Exit, object_id = 1
dleyna-renderer-service[5733]: upnp.c : prv_server_available_cb() --- Enter
dleyna-renderer-service[5733]: upnp.c : prv_server_available_cb() --- UDN uuid:7581325e-fb7e-436d-3da3-7927980cbdd3
dleyna-renderer-service[5733]: upnp.c : prv_server_available_cb() --- IP Address 127.0.0.1
dleyna-renderer-service[5733]: upnp.c : prv_server_available_cb() --- Device not found. Adding
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_add_queue() --- Enter - queue <source-1,dleyna-renderer>
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_add_queue() --- Exit
dleyna-renderer-service[5733]: device.c : dlr_device_new() --- New Device on 127.0.0.1
dleyna-renderer-service[5733]: device.c : dlr_device_new() --- Server Path /com/intel/dLeynaRenderer/server/0
^Cdleyna-renderer-service[5733]: device.c : dlr_device_construct() --- Current step: 0
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_add_task() --- Enter - Task added to queue <source-1,dleyna-renderer>
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_add_task() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_add_task() --- Enter - Task added to queue <source-1,dleyna-renderer>
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_add_task() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_add_task() --- Enter - Task added to queue <source-1,dleyna-renderer>
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_add_task() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_start() --- Enter - Starting queue <source-1,dleyna-renderer>
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_start() --- Exit
dleyna-renderer-service[5733]: device.c : dlr_device_construct() --- Exit
dleyna-renderer-service[5733]: device.c : dlr_device_new() --- Exit
dleyna-renderer-service[5733]: upnp.c : prv_server_available_cb() --- Exit
dleyna-renderer-service[5733]:  
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_set_quitting() --- Enter
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_set_quitting() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : prv_process_task() --- Enter - Start task processing for queue <source-1,dleyna-renderer>
dleyna-renderer-service[5733]: device.c : prv_get_protocol_info() --- Enter
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : prv_process_task() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/main-loop.c : prv_context_quit_cb() --- Quitting
dleyna-renderer-service[5733]: upnp.c : dlr_upnp_unsubscribe() --- Enter
dleyna-renderer-service[5733]: upnp.c : dlr_upnp_unsubscribe() --- Exit
dleyna-renderer-service[5733]: upnp.c : prv_server_unavailable_cb() --- Enter
dleyna-renderer-service[5733]: upnp.c : prv_server_unavailable_cb() --- UDN uuid:7581325e-fb7e-436d-3da3-7927980cbdd3
dleyna-renderer-service[5733]: upnp.c : prv_server_unavailable_cb() --- IP Address 127.0.0.1
dleyna-renderer-service[5733]: device.c : prv_context_unsubscribe() --- Enter
dleyna-renderer-service[5733]: device.c : prv_context_unsubscribe() --- Exit
dleyna-renderer-service[5733]: upnp.c : prv_server_unavailable_cb() --- Device under construction. Cancelling
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_cancel_queue() --- Cancel queue <source-1,dleyna-renderer>
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_task_completed() --- Enter - Task completed for queue <source-1,dleyna-renderer>
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_queue_task_completed() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_cancel_queue() --- Exit
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_unpublish_object() --- Enter, object_id = 1
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_unpublish_object() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/main-loop.c : prv_context_quit_cb() --- Quitting
dleyna-renderer-service[5733]: upnp.c : dlr_upnp_unsubscribe() --- Enter
==5733== Invalid read of size 8
==5733==    at 0x53433C8: dlr_upnp_unsubscribe (upnp.c:810)
==5733==    by 0x533FE6D: prv_control_point_stop_service (server.c:556)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88451d0 is 48 bytes inside a block of size 80 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5342218: dlr_upnp_delete (upnp.c:401)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x507269A: g_hash_table_iter_init (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x53433DA: dlr_upnp_unsubscribe (upnp.c:810)
==5733==    by 0x533FE6D: prv_control_point_stop_service (server.c:556)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8845274 is 68 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x53421FC: dlr_upnp_delete (upnp.c:398)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x50726FD: g_hash_table_iter_next (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x53433FD: dlr_upnp_unsubscribe (upnp.c:811)
==5733==    by 0x533FE6D: prv_control_point_stop_service (server.c:556)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8845274 is 68 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x53421FC: dlr_upnp_delete (upnp.c:398)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x507272B: g_hash_table_iter_next (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x53433FD: dlr_upnp_unsubscribe (upnp.c:811)
==5733==    by 0x533FE6D: prv_control_point_stop_service (server.c:556)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8845230 is 0 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x53421FC: dlr_upnp_delete (upnp.c:398)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
dleyna-renderer-service[5733]: upnp.c : dlr_upnp_unsubscribe() --- Exit
==5733== Invalid read of size 8
==5733==    at 0x53421D1: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88451e8 is 72 bytes inside a block of size 80 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5342218: dlr_upnp_delete (upnp.c:401)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 8
==5733==    at 0x533F842: dlr_host_service_delete (host-service.c:564)
==5733==    by 0x53421DC: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8848880 is 0 bytes inside a block of size 8 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x533F858: dlr_host_service_delete (host-service.c:565)
==5733==    by 0x53421DC: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x5072949: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x533F84C: dlr_host_service_delete (host-service.c:564)
==5733==    by 0x53421DC: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8848910 is 64 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x533F84C: dlr_host_service_delete (host-service.c:564)
==5733==    by 0x53421DC: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x5072951: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x533F84C: dlr_host_service_delete (host-service.c:564)
==5733==    by 0x53421DC: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8848910 is 64 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x533F84C: dlr_host_service_delete (host-service.c:564)
==5733==    by 0x53421DC: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid free() / delete / delete[] / realloc()
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x533F858: dlr_host_service_delete (host-service.c:565)
==5733==    by 0x53421DC: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8848880 is 0 bytes inside a block of size 8 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x533F858: dlr_host_service_delete (host-service.c:565)
==5733==    by 0x53421DC: dlr_upnp_delete (upnp.c:396)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 8
==5733==    at 0x53421E1: dlr_upnp_delete (upnp.c:397)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88451c0 is 32 bytes inside a block of size 80 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5342218: dlr_upnp_delete (upnp.c:401)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 8
==5733==    at 0x5E8FEDB: g_object_unref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1)
==5733==    by 0x53421EC: dlr_upnp_delete (upnp.c:397)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88477e0 is 0 bytes inside a block of size 120 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5EAB7F4: g_type_free_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1)
==5733==    by 0x53421EC: dlr_upnp_delete (upnp.c:397)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 8
==5733==    at 0x5EAC665: g_type_check_instance_is_a (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1)
==5733==    by 0x5E8FEF5: g_object_unref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1)
==5733==    by 0x53421EC: dlr_upnp_delete (upnp.c:397)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88477e0 is 0 bytes inside a block of size 120 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5EAB7F4: g_type_free_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3400.1)
==5733==    by 0x53421EC: dlr_upnp_delete (upnp.c:397)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 8
==5733==    at 0x53421F1: dlr_upnp_delete (upnp.c:398)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88451d0 is 48 bytes inside a block of size 80 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5342218: dlr_upnp_delete (upnp.c:401)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x5072949: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x53421FC: dlr_upnp_delete (upnp.c:398)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8845270 is 64 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x53421FC: dlr_upnp_delete (upnp.c:398)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x5072951: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x53421FC: dlr_upnp_delete (upnp.c:398)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x8845270 is 64 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x53421FC: dlr_upnp_delete (upnp.c:398)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 8
==5733==    at 0x5342201: dlr_upnp_delete (upnp.c:399)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88451d8 is 56 bytes inside a block of size 80 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5342218: dlr_upnp_delete (upnp.c:401)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x5072949: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x534220C: dlr_upnp_delete (upnp.c:399)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88453f0 is 64 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x534220C: dlr_upnp_delete (upnp.c:399)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 4
==5733==    at 0x5072951: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x534220C: dlr_upnp_delete (upnp.c:399)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88453f0 is 64 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x534220C: dlr_upnp_delete (upnp.c:399)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid free() / delete / delete[] / realloc()
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5342218: dlr_upnp_delete (upnp.c:401)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88451a0 is 0 bytes inside a block of size 80 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5342218: dlr_upnp_delete (upnp.c:401)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_unpublish_object() --- Enter, object_id = 1
dleyna-renderer-service[5733]: src/connector-dbus.c : prv_connector_unpublish_object() --- Exit
dleyna-renderer-service[5733]: libdleyna/core/main-loop.c : prv_context_mainloop_quit_cb() --- Main loop quit
dleyna-renderer-service[5733]: libdleyna/core/main-loop.c : prv_context_mainloop_quit_cb() --- Main loop quit
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : dleyna_task_processor_free() --- Enter
dleyna-renderer-service[5733]: libdleyna/core/task-processor.c : prv_free_cb() --- Enter
dleyna-renderer-service[5733]: upnp.c : prv_device_chain_end() --- Enter
==5733== Invalid read of size 8
==5733==    at 0x53415CB: prv_device_chain_end (upnp.c:90)
==5733==    by 0x4E36905: prv_free_cb (task-processor.c:103)
==5733==    by 0x5071FB2: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x507296C: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E36A54: dleyna_task_processor_free (task-processor.c:136)
==5733==    by 0x4E35467: prv_context_free (main-loop.c:108)
==5733==    by 0x4E355FC: dleyna_main_loop_start (main-loop.c:165)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88451d8 is 56 bytes inside a block of size 80 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x5342218: dlr_upnp_delete (upnp.c:401)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Invalid read of size 8
==5733==    at 0x5072318: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x53415D9: prv_device_chain_end (upnp.c:90)
==5733==    by 0x4E36905: prv_free_cb (task-processor.c:103)
==5733==    by 0x5071FB2: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x507296C: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E36A54: dleyna_task_processor_free (task-processor.c:136)
==5733==    by 0x4E35467: prv_context_free (main-loop.c:108)
==5733==    by 0x4E355FC: dleyna_main_loop_start (main-loop.c:165)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x88453e0 is 48 bytes inside a block of size 88 free'd
==5733==    at 0x4C2A739: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5733==    by 0x534220C: dlr_upnp_delete (upnp.c:399)
==5733==    by 0x533FE88: prv_control_point_stop_service (server.c:559)
==5733==    by 0x4E35329: prv_context_quit_cb (main-loop.c:61)
==5733==    by 0x5082AB4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x5082DE7: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x50831E1: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E355D0: dleyna_main_loop_start (main-loop.c:153)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733== 
==5733== Jump to the invalid address stated on the next line
==5733==    at 0x0: ???
==5733==    by 0x4E36905: prv_free_cb (task-processor.c:103)
==5733==    by 0x5071FB2: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x507296C: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E36A54: dleyna_task_processor_free (task-processor.c:136)
==5733==    by 0x4E35467: prv_context_free (main-loop.c:108)
==5733==    by 0x4E355FC: dleyna_main_loop_start (main-loop.c:165)
==5733==    by 0x400EBA: main (daemon.c:93)
==5733==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==5733== 
==5733== 
==5733== Process terminating with default action of signal 11 (SIGSEGV)
==5733==  Bad permissions for mapped region at address 0x0
==5733==    at 0x0: ???
==5733==    by 0x4E36905: prv_free_cb (task-processor.c:103)
==5733==    by 0x5071FB2: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x507296C: g_hash_table_unref (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3400.1)
==5733==    by 0x4E36A54: dleyna_task_processor_free (task-processor.c:136)
==5733==    by 0x4E35467: prv_context_free (main-loop.c:108)
==5733==    by 0x4E355FC: dleyna_main_loop_start (main-loop.c:165)
==5733==    by 0x400EBA: main (daemon.c:93)

There must be a race condition somewhere when shutting down.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.