diff mbox series

[2/2] package/libupnp18: add upstream patch to fix runtime crash with musl

Message ID 20190509110438.31340-2-joerg.krause@embedded.rocks
State Accepted
Headers show
Series [1/2] package/libupnp18: needs host-pkgconf | expand

Commit Message

Jörg Krause May 9, 2019, 11:04 a.m. UTC
Applications build with a musl 1.1.20+ toolchain and linked with libupnpp will
crash at runtime with `Illegal instruction` as musl is more strict with
trying to detach an already detached thread resulting in undefined
behaviour.

Upstream status:
https://github.com/mrjimenez/pupnp/issues/102

Backported from:
https://github.com/mrjimenez/pupnp/commit/04b454f693d0c71336252380d08f1d02967e133e

Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>
---
 ...tach-detached-thread-the-result-is-u.patch | 39 +++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 package/libupnp18/0002-Do-not-try-to-detach-detached-thread-the-result-is-u.patch

Comments

Thomas Petazzoni May 18, 2019, 9:32 p.m. UTC | #1
On Thu,  9 May 2019 13:04:38 +0200
Jörg Krause <joerg.krause@embedded.rocks> wrote:

> Applications build with a musl 1.1.20+ toolchain and linked with libupnpp will
> crash at runtime with `Illegal instruction` as musl is more strict with
> trying to detach an already detached thread resulting in undefined
> behaviour.
> 
> Upstream status:
> https://github.com/mrjimenez/pupnp/issues/102
> 
> Backported from:
> https://github.com/mrjimenez/pupnp/commit/04b454f693d0c71336252380d08f1d02967e133e
> 
> Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>
> ---
>  ...tach-detached-thread-the-result-is-u.patch | 39 +++++++++++++++++++
>  1 file changed, 39 insertions(+)
>  create mode 100644 package/libupnp18/0002-Do-not-try-to-detach-detached-thread-the-result-is-u.patch

Applied to master, thanks.

Thomas
Peter Korsgaard June 6, 2019, 7:35 a.m. UTC | #2
>>>>> "Jörg" == Jörg Krause <joerg.krause@embedded.rocks> writes:

 > Applications build with a musl 1.1.20+ toolchain and linked with libupnpp will
 > crash at runtime with `Illegal instruction` as musl is more strict with
 > trying to detach an already detached thread resulting in undefined
 > behaviour.

 > Upstream status:
 > https://github.com/mrjimenez/pupnp/issues/102

 > Backported from:
 > https://github.com/mrjimenez/pupnp/commit/04b454f693d0c71336252380d08f1d02967e133e

 > Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>

Committed to 2019.02.x, thanks.
diff mbox series

Patch

diff --git a/package/libupnp18/0002-Do-not-try-to-detach-detached-thread-the-result-is-u.patch b/package/libupnp18/0002-Do-not-try-to-detach-detached-thread-the-result-is-u.patch
new file mode 100644
index 0000000000..601ea89be7
--- /dev/null
+++ b/package/libupnp18/0002-Do-not-try-to-detach-detached-thread-the-result-is-u.patch
@@ -0,0 +1,39 @@ 
+From 04b454f693d0c71336252380d08f1d02967e133e Mon Sep 17 00:00:00 2001
+From: Jean-Francois Dockes <jf@dockes.org>
+Date: Sun, 27 Jan 2019 10:44:17 +0100
+Subject: [PATCH] Do not try to detach detached thread, the result is
+ undefined. Fixes issue #102
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fixes runtime crash with musl 1.1.20+. The problem is that libupnp is
+calling pthread_detach() on a thread which was created in the detached state.
+
+Backported from: 04b454f693d0c71336252380d08f1d02967e133e
+
+(cherry picked from commit 386b7ed79146ecf7a3bba49f48cb8f41a9b49170)
+Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>
+---
+ upnp/src/threadutil/ThreadPool.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/upnp/src/threadutil/ThreadPool.c b/upnp/src/threadutil/ThreadPool.c
+index d272907..5e590ed 100644
+--- a/upnp/src/threadutil/ThreadPool.c
++++ b/upnp/src/threadutil/ThreadPool.c
+@@ -651,11 +651,6 @@ static int CreateWorker(
+ 	rc = ithread_create(&temp, &attr, WorkerThread, tp);
+ 	ithread_attr_destroy(&attr);
+ 	if (rc == 0) {
+-		rc = ithread_detach(temp);
+-		/* ithread_detach will return EINVAL if thread has been
+-		 successfully detached by ithread_create */
+-		if (rc == EINVAL)
+-			rc = 0;
+ 		tp->pendingWorkerThreadStart = 1;
+ 		/* wait until the new worker thread starts */
+ 		while (tp->pendingWorkerThreadStart) {
+-- 
+2.21.0
+