[packages/dleyna-renderer] Initial release

megabajt megabajt at pld-linux.org
Thu Dec 10 21:30:03 CET 2015


commit d59b13d67688a9c6f7ffbe644cb3d3a9dacce6d2
Author: Marcin Banasiak <marcin.banasiak at gmail.com>
Date:   Thu Dec 10 21:29:37 2015 +0100

    Initial release

 ...re-that-g_context.watchers-has-a-valid-va.patch | 35 +++++++++
 ...onnect-signal-handlers-during-destruction.patch | 77 ++++++++++++++++++++
 dleyna-renderer.spec                               | 84 ++++++++++++++++++++++
 3 files changed, 196 insertions(+)
---
diff --git a/dleyna-renderer.spec b/dleyna-renderer.spec
new file mode 100644
index 0000000..a9326f8
--- /dev/null
+++ b/dleyna-renderer.spec
@@ -0,0 +1,84 @@
+Summary:	Service for interacting with Digital Media Renderers
+Name:		dleyna-renderer
+Version:	0.5.0
+Release:	1
+License:	LGPL v2
+Group:		Applications
+Source0:	https://01.org/sites/default/files/downloads/dleyna/%{name}-%{version}.tar.gz
+# Source0-md5:	5a7dc061fa26c3f3b34210fa0cef5d56
+Patch0:		0001-Server-Ensure-that-g_context.watchers-has-a-valid-va.patch
+Patch1:		0001-UPnP-Disconnect-signal-handlers-during-destruction.patch
+URL:		https://01.org/dleyna/
+BuildRequires:	autoconf >= 2.66
+BuildRequires:	automake
+BuildRequires:	dleyna-core-devel >= 0.5.0
+BuildRequires:	glib2-devel >= 1:2.28.0
+BuildRequires:	gssdp-devel >= 0.13.2
+BuildRequires:	gupnp-av-devel >= 0.11.5
+BuildRequires:	gupnp-devel >= 0.20.5
+BuildRequires:	gupnp-dlna-devel >= 0.9.4
+BuildRequires:	libsoup-devel >= 2.28.2
+BuildRequires:	libtool >= 2:2.2.6
+BuildRequires:	pkgconfig >= 1:0.16
+Requires:	dleyna-connector-dbus
+Requires:	dleyna-core >= 0.5.0
+Requires:	glib2 >= 1:2.28.0
+Requires:	gssdp >= 0.13.2
+Requires:	gupnp >= 0.20.5
+Requires:	gupnp-av >= 0.11.5
+Requires:	gupnp-dlna >= 0.9.4
+Requires:	libsoup >= 2.28.2
+BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+D-Bus service for clients to discover and manipulate DLNA Digital
+Media Renderers (DMRs).
+
+%package devel
+Summary:	Development files for dLeyna renderer
+Group:		Development/Libraries
+Requires:	dleyna-core-devel >= 0.5.0
+Requires:	glib2-devel >= 1:2.28.0
+
+%description devel
+This package provides development files for dLeyna renderer.
+
+%prep
+%setup -q
+%patch0 -p1
+%patch1 -p1
+
+%build
+%{__libtoolize}
+%{__aclocal} -I m4
+%{__autoconf}
+%{__autoheader}
+%{__automake}
+%configure \
+	--disable-silent-rules
+%{__make}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+%{__make} install \
+	DESTDIR=$RPM_BUILD_ROOT
+
+%{__rm} $RPM_BUILD_ROOT%{_libdir}/dleyna-renderer/*.la
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(644,root,root,755)
+%doc AUTHORS ChangeLog README
+%attr(755,root,root) %{_libexecdir}/dleyna-renderer-service
+%dir %{_libdir}/dleyna-renderer
+%attr(755,root,root) %{_libdir}/dleyna-renderer/libdleyna-renderer-1.0.so*
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dleyna-renderer-service.conf
+%{_datadir}/dbus-1/services/com.intel.dleyna-renderer.service
+
+%files devel
+%defattr(644,root,root,755)
+%{_includedir}/dleyna-1.0/libdleyna/renderer
+%{_pkgconfigdir}/dleyna-renderer-service-1.0.pc
diff --git a/0001-Server-Ensure-that-g_context.watchers-has-a-valid-va.patch b/0001-Server-Ensure-that-g_context.watchers-has-a-valid-va.patch
new file mode 100644
index 0000000..5fe61ca
--- /dev/null
+++ b/0001-Server-Ensure-that-g_context.watchers-has-a-valid-va.patch
@@ -0,0 +1,35 @@
+From 2f9fdf97082b63fcd0809905d29d0f8a49bb5c43 Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir at freedesktop.org>
+Date: Tue, 20 Jan 2015 11:20:07 +0100
+Subject: [PATCH] [Server] Ensure that g_context.watchers has a valid value
+
+Since g_context.watchers is an unsigned integer, we should be careful
+not to decrement it below zero. This can happen if the service is
+spawned as a result of the following command:
+$ gdbus call \
+    --session \
+    --dest com.intel.dleyna-renderer \
+    --object-path /com/intel/dLeynaRenderer \
+    --method com.intel.dLeynaRenderer.Manager.Release
+---
+ libdleyna/renderer/server.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/libdleyna/renderer/server.c b/libdleyna/renderer/server.c
+index b241a4f..b0af8d1 100644
+--- a/libdleyna/renderer/server.c
++++ b/libdleyna/renderer/server.c
+@@ -688,7 +688,9 @@ static void prv_remove_client(const gchar *name)
+ 
+ 	dlr_upnp_lost_client(g_context.upnp, name);
+ 
+-	g_context.watchers--;
++	if (g_context.watchers > 0)
++		g_context.watchers--;
++
+ 	if (g_context.watchers == 0)
+ 		if (!dleyna_settings_is_never_quit(g_context.settings))
+ 			dleyna_task_processor_set_quitting(g_context.processor);
+-- 
+2.1.0
+
diff --git a/0001-UPnP-Disconnect-signal-handlers-during-destruction.patch b/0001-UPnP-Disconnect-signal-handlers-during-destruction.patch
new file mode 100644
index 0000000..fe12077
--- /dev/null
+++ b/0001-UPnP-Disconnect-signal-handlers-during-destruction.patch
@@ -0,0 +1,77 @@
+From ae4a03a2c6928d0d3c8fbcdba4831ce1d212f50b Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir at freedesktop.org>
+Date: Tue, 20 Jan 2015 13:59:33 +0100
+Subject: [PATCH] [UPnP] Disconnect signal handlers during destruction
+
+A GUPnPContextManager can outlive a dlr_upnp_t because it might be
+using asynchronous operations during its construction (eg.,
+GUPnPNetworkManager) which retain references to it. This can be
+demonstrated if the service is spawned as a result of the following
+command:
+$ gdbus call \
+    --session \
+    --dest com.intel.dleyna-renderer \
+    --object-path /com/intel/dLeynaRenderer \
+    --method com.intel.dLeynaRenderer.Manager.Release
+
+This leads to the signal handlers being invoked with an invalid
+dlr_upnp_t and the outcome is a crash.
+
+To avoid this, we should disconnect the callbacks listening to the
+context manager and the control points belonging to it.
+---
+ libdleyna/renderer/upnp.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/libdleyna/renderer/upnp.c b/libdleyna/renderer/upnp.c
+index fefc340..cce4f4f 100644
+--- a/libdleyna/renderer/upnp.c
++++ b/libdleyna/renderer/upnp.c
+@@ -45,6 +45,7 @@ struct dlr_upnp_t_ {
+ 	void *user_data;
+ 	GHashTable *server_udn_map;
+ 	GHashTable *server_uc_map;
++	GList *cps;
+ 	guint counter;
+ 	dlr_host_service_t *host_service;
+ };
+@@ -357,6 +358,7 @@ static void prv_on_context_available(GUPnPContextManager *context_manager,
+ 
+ 	gssdp_resource_browser_set_active(GSSDP_RESOURCE_BROWSER(cp), TRUE);
+ 	gupnp_context_manager_manage_control_point(upnp->context_manager, cp);
++	upnp->cps = g_list_prepend (upnp->cps, g_object_ref (cp));
+ 	g_object_unref(cp);
+ }
+ 
+@@ -393,10 +395,28 @@ dlr_upnp_t *dlr_upnp_new(dleyna_connector_id_t connection,
+ void dlr_upnp_delete(dlr_upnp_t *upnp)
+ {
+ 	if (upnp) {
++		GList *l;
++
++		for (l = upnp->cps; l != NULL; l = l->next) {
++			GUPnPControlPoint *cp = GUPNP_CONTROL_POINT (l->data);
++
++			g_signal_handlers_disconnect_by_func (cp,
++							      prv_server_available_cb,
++							      upnp);
++			g_signal_handlers_disconnect_by_func (cp,
++							      prv_server_unavailable_cb,
++							      upnp);
++		}
++
++		g_signal_handlers_disconnect_by_func (upnp->context_manager,
++						      prv_on_context_available,
++						      upnp);
++
+ 		dlr_host_service_delete(upnp->host_service);
+ 		g_object_unref(upnp->context_manager);
+ 		g_hash_table_unref(upnp->server_udn_map);
+ 		g_hash_table_unref(upnp->server_uc_map);
++		g_list_free_full (upnp->cps, g_object_unref);
+ 
+ 		g_free(upnp);
+ 	}
+-- 
+2.1.0
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/dleyna-renderer.git/commitdiff/d59b13d67688a9c6f7ffbe644cb3d3a9dacce6d2



More information about the pld-cvs-commit mailing list