summaryrefslogtreecommitdiffstats
path: root/misc
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-02-26 23:28:02 +0100
committerwm4 <wm4@nowhere>2016-02-26 23:28:02 +0100
commita6a358ce619e50ce6ca2307555a010d1c08341e0 (patch)
tree8056e86918b34435c179601abbd2a716f7263bd8 /misc
parent8bafd68fffc7b7f3358515fd57de2d1f1b5d4206 (diff)
downloadmpv-a6a358ce619e50ce6ca2307555a010d1c08341e0.tar.bz2
mpv-a6a358ce619e50ce6ca2307555a010d1c08341e0.tar.xz
dispatch: clarify lifetime issues
Diffstat (limited to 'misc')
-rw-r--r--misc/dispatch.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/misc/dispatch.c b/misc/dispatch.c
index 99a78bd006..2ddac2c92d 100644
--- a/misc/dispatch.c
+++ b/misc/dispatch.c
@@ -62,10 +62,15 @@ static void queue_dtor(void *p)
pthread_mutex_destroy(&queue->exclusive_lock);
}
-// A dispatch queue lets other threads runs callbacks in a target thread.
-// The target thread is the thread which created the queue and which calls
-// mp_dispatch_queue_process().
-// Free the dispatch queue with talloc_free(). (It must be empty.)
+// A dispatch queue lets other threads run callbacks in a target thread.
+// The target thread is the thread which calls mp_dispatch_queue_process().
+// Free the dispatch queue with talloc_free(). At the time of destruction,
+// the queue must be empty. The easiest way to guarantee this is to
+// terminate all potential senders, then call mp_dispatch_run() with a
+// function that e.g. makes the target thread exit, then pthread_join() the
+// target thread, and finally destroy the queue. Another way is calling
+// mp_dispatch_queue_process() after terminating all potential senders, and
+// then destroying the queue.
struct mp_dispatch_queue *mp_dispatch_create(void *ta_parent)
{
struct mp_dispatch_queue *queue = talloc_ptrtype(ta_parent, queue);