Commit 9d7a49f6 for quagga.net

commit 9d7a49f6090b6106ee9ecad4687167b2e60d98c3
Author: Paul Jakma <paul@jakma.org>
Date:   Mon Feb 19 20:55:20 2018 +0000

    lib: Fix assert in thread_add_unuse if thread_execute was used

    * thread.c: (thread_call) thread_execute passes in a dummy thread, on its
      stack, with a NULL thread master. Those shouldn't be added to the unuse
      list or thread_add_unuse rightly asserts.

      Fix this very dumb bug.

      See https://bugzilla.quagga.net/show_bug.cgi?id=975

      With thanks to Sergey Popov, admin@pinkbyte.ru, and Andreas Nilsson,
      andrnils@resilans.se, for help with diagnosis and testing.

diff --git a/lib/thread.c b/lib/thread.c
index 55effaac..f7d1a5ff 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -1276,7 +1276,12 @@ struct thread *thread_current = NULL;

 /* We check thread consumed time. If the system has getrusage, we'll
    use that to get in-depth stats on the performance of the thread in addition
-   to wall clock time stats from gettimeofday. */
+   to wall clock time stats from gettimeofday.
+
+   'Dummy' threads (e.g.  see funcname_thread_execute) must have
+   thread->master == NULL.
+ */
+
 static void
 thread_call (struct thread *thread)
 {
@@ -1336,8 +1341,10 @@ thread_call (struct thread *thread)
 		 realtime/1000, cputime/1000);
     }
 #endif /* CONSUMED_TIME_CHECK */
+

-  thread_add_unuse (thread);
+  if (thread->master)
+    thread_add_unuse (thread);
 }

 /* Execute thread */