/src/vlc/include/vlc_threads.h
Line | Count | Source (jump to first uncovered line) |
1 | | /***************************************************************************** |
2 | | * vlc_threads.h : threads implementation for the VideoLAN client |
3 | | * This header provides portable declarations for mutexes & conditions |
4 | | ***************************************************************************** |
5 | | * Copyright (C) 1999, 2002 VLC authors and VideoLAN |
6 | | * Copyright © 2007-2016 Rémi Denis-Courmont |
7 | | * |
8 | | * Authors: Jean-Marc Dressler <polux@via.ecp.fr> |
9 | | * Samuel Hocevar <sam@via.ecp.fr> |
10 | | * Gildas Bazin <gbazin@netcourrier.com> |
11 | | * Christophe Massiot <massiot@via.ecp.fr> |
12 | | * |
13 | | * This program is free software; you can redistribute it and/or modify it |
14 | | * under the terms of the GNU Lesser General Public License as published by |
15 | | * the Free Software Foundation; either version 2.1 of the License, or |
16 | | * (at your option) any later version. |
17 | | * |
18 | | * This program is distributed in the hope that it will be useful, |
19 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
20 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
21 | | * GNU Lesser General Public License for more details. |
22 | | * |
23 | | * You should have received a copy of the GNU Lesser General Public License |
24 | | * along with this program; if not, write to the Free Software Foundation, |
25 | | * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. |
26 | | *****************************************************************************/ |
27 | | |
28 | | #ifndef VLC_THREADS_H_ |
29 | | #define VLC_THREADS_H_ |
30 | | |
31 | | #ifndef __cplusplus |
32 | | #include <stdatomic.h> |
33 | | #endif |
34 | | |
35 | | #include <vlc_tick.h> |
36 | | |
37 | | /** |
38 | | * \ingroup os |
39 | | * \defgroup thread Threads and synchronization primitives |
40 | | * @{ |
41 | | * \file |
42 | | * Thread primitive declarations |
43 | | */ |
44 | | |
45 | | /** |
46 | | * Issues an explicit deferred cancellation point. |
47 | | * |
48 | | * This has no effects if thread cancellation is disabled. |
49 | | * This can be called when there is a rather slow non-sleeping operation. |
50 | | * This is also used to force a cancellation point in a function that would |
51 | | * otherwise <em>not always</em> be one (block_FifoGet() is an example). |
52 | | */ |
53 | | VLC_API void vlc_testcancel(void); |
54 | | |
55 | | #if defined (_WIN32) |
56 | | # include <process.h> |
57 | | # ifndef ETIMEDOUT |
58 | | # define ETIMEDOUT 10060 /* This is the value in winsock.h. */ |
59 | | # endif |
60 | | |
61 | | typedef struct vlc_thread *vlc_thread_t; |
62 | | # define VLC_THREAD_CANCELED ((void*) UINTPTR_MAX) |
63 | | |
64 | | typedef struct vlc_threadvar *vlc_threadvar_t; |
65 | | typedef struct vlc_timer *vlc_timer_t; |
66 | | |
67 | | #elif defined (__OS2__) |
68 | | # include <errno.h> |
69 | | |
70 | | typedef struct vlc_thread *vlc_thread_t; |
71 | | #define VLC_THREAD_CANCELED ((void*) UINTPTR_MAX) |
72 | | |
73 | | typedef struct vlc_threadvar *vlc_threadvar_t; |
74 | | typedef struct vlc_timer *vlc_timer_t; |
75 | | |
76 | | # define pthread_sigmask sigprocmask |
77 | | |
78 | | #elif defined (__ANDROID__) /* pthreads subset without pthread_cancel() */ |
79 | | # include <unistd.h> |
80 | | # include <pthread.h> |
81 | | # include <poll.h> |
82 | | # define LIBVLC_USE_PTHREAD_CLEANUP 1 |
83 | | |
84 | | typedef struct vlc_thread *vlc_thread_t; |
85 | | #define VLC_THREAD_CANCELED ((void*) UINTPTR_MAX) |
86 | | typedef pthread_key_t vlc_threadvar_t; |
87 | | typedef struct vlc_timer *vlc_timer_t; |
88 | | |
89 | | #else /* POSIX threads */ |
90 | | # include <unistd.h> /* _POSIX_SPIN_LOCKS */ |
91 | | # include <pthread.h> |
92 | | |
93 | | /** |
94 | | * Whether LibVLC threads are based on POSIX threads. |
95 | | */ |
96 | | # define LIBVLC_USE_PTHREAD 1 |
97 | | |
98 | | /** |
99 | | * Whether LibVLC thread cancellation is based on POSIX threads. |
100 | | */ |
101 | | # define LIBVLC_USE_PTHREAD_CLEANUP 1 |
102 | | |
103 | | /** |
104 | | * Thread handle. |
105 | | */ |
106 | | typedef struct |
107 | | { |
108 | | pthread_t handle; |
109 | | } vlc_thread_t; |
110 | | |
111 | | /** |
112 | | * Return value of a canceled thread. |
113 | | */ |
114 | | #define VLC_THREAD_CANCELED PTHREAD_CANCELED |
115 | | |
116 | | /** |
117 | | * Thread-local key handle. |
118 | | * |
119 | | * \ingroup threadvar |
120 | | */ |
121 | | typedef pthread_key_t vlc_threadvar_t; |
122 | | |
123 | | /** |
124 | | * Threaded timer handle. |
125 | | * |
126 | | * \ingroup timer |
127 | | */ |
128 | | typedef struct vlc_timer *vlc_timer_t; |
129 | | |
130 | | #endif |
131 | | |
132 | | /** |
133 | | * \defgroup mutex Mutual exclusion locks |
134 | | * @{ |
135 | | */ |
136 | | /** |
137 | | * Mutex. |
138 | | * |
139 | | * Storage space for a mutual exclusion lock. |
140 | | */ |
141 | | typedef struct |
142 | | { |
143 | | union { |
144 | | #ifndef __cplusplus |
145 | | struct { |
146 | | atomic_uint value; |
147 | | atomic_uint recursion; |
148 | | atomic_ulong owner; |
149 | | }; |
150 | | #endif |
151 | | struct { |
152 | | unsigned int value; |
153 | | unsigned int recursion; |
154 | | unsigned long owner; |
155 | | } dummy; |
156 | | }; |
157 | | } vlc_mutex_t; |
158 | | |
159 | | /** |
160 | | * Static initializer for (static) mutex. |
161 | | * |
162 | | * \note This only works in C code. |
163 | | * In C++, consider using a global ::vlc::threads::mutex instance instead. |
164 | | */ |
165 | 0 | #define VLC_STATIC_MUTEX { \ |
166 | 0 | .value = 0, \ |
167 | 0 | .recursion = 0, \ |
168 | 0 | .owner = 0, \ |
169 | 0 | } |
170 | | |
171 | | /** |
172 | | * Initializes a fast mutex. |
173 | | * |
174 | | * Recursive locking of a fast mutex is undefined behaviour. (In debug builds, |
175 | | * recursive locking will cause an assertion failure.) |
176 | | */ |
177 | | VLC_API void vlc_mutex_init(vlc_mutex_t *); |
178 | | |
179 | | /** |
180 | | * Initializes a recursive mutex. |
181 | | * \warning This is strongly discouraged. Please use normal mutexes. |
182 | | */ |
183 | | VLC_API void vlc_mutex_init_recursive(vlc_mutex_t *); |
184 | | |
185 | | /** |
186 | | * Acquires a mutex. |
187 | | * |
188 | | * If needed, this waits for any other thread to release it. |
189 | | * |
190 | | * \warning Beware of deadlocks when locking multiple mutexes at the same time, |
191 | | * or when using mutexes from callbacks. |
192 | | * |
193 | | * \note This function is not a cancellation point. |
194 | | */ |
195 | | VLC_API void vlc_mutex_lock(vlc_mutex_t *); |
196 | | |
197 | | /** |
198 | | * Tries to acquire a mutex. |
199 | | * |
200 | | * This function acquires the mutex if and only if it is not currently held by |
201 | | * another thread. This function never sleeps and can be used in delay-critical |
202 | | * code paths. |
203 | | * |
204 | | * \note This function is not a cancellation point. |
205 | | * |
206 | | * \warning If this function fails, then the mutex is held... by another |
207 | | * thread. The calling thread must deal with the error appropriately. That |
208 | | * typically implies postponing the operations that would have required the |
209 | | * mutex. If the thread cannot defer those operations, then it must use |
210 | | * vlc_mutex_lock(). If in doubt, use vlc_mutex_lock() instead. |
211 | | * |
212 | | * @return 0 if the mutex could be acquired, an error code otherwise. |
213 | | */ |
214 | | VLC_API int vlc_mutex_trylock( vlc_mutex_t * ) VLC_USED; |
215 | | |
216 | | /** |
217 | | * Releases a mutex. |
218 | | * |
219 | | * If the mutex is not held by the calling thread, the behaviour is undefined. |
220 | | * |
221 | | * \note This function is not a cancellation point. |
222 | | */ |
223 | | VLC_API void vlc_mutex_unlock(vlc_mutex_t *); |
224 | | |
225 | | /** |
226 | | * Checks if a mutex is locked. |
227 | | * |
228 | | * This function checks if the calling thread holds a given mutual exclusion |
229 | | * lock. It has no side effects and is essentially intended for run-time |
230 | | * debugging. |
231 | | * |
232 | | * @note To assert that the calling thread holds a lock, the helper macro |
233 | | * vlc_mutex_assert() should be used instead of this function. |
234 | | * |
235 | | * @note While it is nominally possible to implement recursive lock semantics |
236 | | * with this function, vlc_mutex_init_recursive() should be used instead to |
237 | | * create a recursive mutex explicitly.. |
238 | | * |
239 | | * @retval false the mutex is not locked by the calling thread |
240 | | * @retval true the mutex is locked by the calling thread |
241 | | */ |
242 | | VLC_API bool vlc_mutex_held(const vlc_mutex_t *) VLC_USED; |
243 | | |
244 | | /** |
245 | | * Asserts that a mutex is locked by the calling thread. |
246 | | */ |
247 | 3.27k | #define vlc_mutex_assert(m) assert(vlc_mutex_held(m)) |
248 | | |
249 | | /** @} */ |
250 | | |
251 | | /** |
252 | | * \defgroup condvar Condition variables |
253 | | * |
254 | | * The condition variable is the most common and generic mean for threads to |
255 | | * wait for events triggered by other threads. |
256 | | * |
257 | | * See also POSIX @c pthread_cond_t . |
258 | | * @{ |
259 | | */ |
260 | | |
261 | | struct vlc_cond_waiter; |
262 | | |
263 | | /** |
264 | | * Condition variable. |
265 | | * |
266 | | * Storage space for a thread condition variable. |
267 | | */ |
268 | | typedef struct |
269 | | { |
270 | | struct vlc_cond_waiter *head; |
271 | | vlc_mutex_t lock; |
272 | | } vlc_cond_t; |
273 | | |
274 | | /** |
275 | | * Static initializer for (static) condition variable. |
276 | | */ |
277 | | #define VLC_STATIC_COND { NULL, VLC_STATIC_MUTEX } |
278 | | |
279 | | /** |
280 | | * Initializes a condition variable. |
281 | | */ |
282 | | VLC_API void vlc_cond_init(vlc_cond_t *); |
283 | | |
284 | | /** |
285 | | * Wakes up one thread waiting on a condition variable. |
286 | | * |
287 | | * If any thread is currently waiting on the condition variable, at least one |
288 | | * of those threads will be woken up. Otherwise, this function has no effects. |
289 | | * |
290 | | * \note This function is not a cancellation point. |
291 | | */ |
292 | | VLC_API void vlc_cond_signal(vlc_cond_t *); |
293 | | |
294 | | /** |
295 | | * Wakes up all threads waiting on a condition variable. |
296 | | * |
297 | | * \note This function is not a cancellation point. |
298 | | */ |
299 | | VLC_API void vlc_cond_broadcast(vlc_cond_t *); |
300 | | |
301 | | /** |
302 | | * Waits on a condition variable. |
303 | | * |
304 | | * The calling thread will be suspended until another thread calls |
305 | | * vlc_cond_signal() or vlc_cond_broadcast() on the same condition variable, |
306 | | * the thread is cancelled with vlc_cancel(), or the system causes a |
307 | | * <em>spurious</em> unsolicited wake-up. |
308 | | * |
309 | | * A mutex is needed to wait on a condition variable. It must <b>not</b> be |
310 | | * a recursive mutex. Although it is possible to use the same mutex for |
311 | | * multiple condition, it is not valid to use different mutexes for the same |
312 | | * condition variable at the same time from different threads. |
313 | | * |
314 | | * The canonical way to use a condition variable to wait for event foobar is: |
315 | | @code |
316 | | vlc_mutex_lock(&lock); |
317 | | |
318 | | while (!foobar) |
319 | | vlc_cond_wait(&wait, &lock); |
320 | | |
321 | | // -- foobar is now true, do something about it here -- |
322 | | |
323 | | vlc_mutex_unlock(&lock); |
324 | | @endcode |
325 | | * |
326 | | * \param cond condition variable to wait on |
327 | | * \param mutex mutex which is unlocked while waiting, |
328 | | * then locked again when waking up. |
329 | | */ |
330 | | VLC_API void vlc_cond_wait(vlc_cond_t *cond, vlc_mutex_t *mutex); |
331 | | |
332 | | /** |
333 | | * Waits on a condition variable up to a certain date. |
334 | | * |
335 | | * This works like vlc_cond_wait() but with an additional time-out. |
336 | | * The time-out is expressed as an absolute timestamp using the same arbitrary |
337 | | * time reference as the vlc_tick_now() and vlc_tick_wait() functions. |
338 | | * |
339 | | * \param cond condition variable to wait on |
340 | | * \param mutex mutex which is unlocked while waiting, |
341 | | * then locked again when waking up |
342 | | * \param deadline <b>absolute</b> timeout |
343 | | * |
344 | | * \return 0 if the condition was signaled, an error code in case of timeout. |
345 | | */ |
346 | | VLC_API int vlc_cond_timedwait(vlc_cond_t *cond, vlc_mutex_t *mutex, |
347 | | vlc_tick_t deadline); |
348 | | |
349 | | /** @} */ |
350 | | |
351 | | /** |
352 | | * \defgroup semaphore Semaphores |
353 | | * |
354 | | * The semaphore is the simplest thread synchronization primitive, consisting |
355 | | * of a simple counter. |
356 | | * |
357 | | * See also POSIX @c sem_t . |
358 | | * |
359 | | * @{ |
360 | | */ |
361 | | /** |
362 | | * Semaphore. |
363 | | * |
364 | | * Storage space for a thread-safe semaphore. |
365 | | */ |
366 | | typedef struct |
367 | | { |
368 | | union { |
369 | | #ifndef __cplusplus |
370 | | atomic_uint value; |
371 | | #endif |
372 | | int dummy; |
373 | | }; |
374 | | } vlc_sem_t; |
375 | | |
376 | | /** |
377 | | * Initializes a semaphore. |
378 | | * |
379 | | * @param sem a semaphore to initialize |
380 | | * @param count initial semaphore value (typically 0) |
381 | | */ |
382 | | VLC_API void vlc_sem_init(vlc_sem_t *sem, unsigned count); |
383 | | |
384 | | /** |
385 | | * Increments the value of a semaphore. |
386 | | * |
387 | | * \note This function is not a cancellation point. |
388 | | * |
389 | | * \return 0 on success, EOVERFLOW in case of integer overflow. |
390 | | */ |
391 | | VLC_API int vlc_sem_post(vlc_sem_t *); |
392 | | |
393 | | /** |
394 | | * Waits on a semaphore. |
395 | | * |
396 | | * This function atomically waits for the semaphore to become non-zero then |
397 | | * decrements it, and returns. If the semaphore is non-zero on entry, it is |
398 | | * immediately decremented. |
399 | | * |
400 | | * \note This function may be a point of cancellation. |
401 | | */ |
402 | | VLC_API void vlc_sem_wait(vlc_sem_t *); |
403 | | |
404 | | /** |
405 | | * Tries to decrement a semaphore. |
406 | | * |
407 | | * This function decrements the semaphore if its value is not zero. |
408 | | * |
409 | | * \param sem semaphore to decrement |
410 | | * |
411 | | * \retval 0 the semaphore was decremented |
412 | | * \retval EAGAIN the semaphore was zero and could not be decremented |
413 | | */ |
414 | | VLC_API int vlc_sem_trywait(vlc_sem_t *sem) VLC_USED; |
415 | | |
416 | | /** |
417 | | * Waits on a semaphore within a deadline. |
418 | | * |
419 | | * This function waits for the semaphore just like vlc_sem_wait(), but only |
420 | | * up to a given deadline. |
421 | | * |
422 | | * \param sem semaphore to wait for |
423 | | * \param deadline deadline to wait until |
424 | | * |
425 | | * \retval 0 the semaphore was decremented |
426 | | * \retval ETIMEDOUT the deadline was reached |
427 | | */ |
428 | | VLC_API int vlc_sem_timedwait(vlc_sem_t *sem, vlc_tick_t deadline) VLC_USED; |
429 | | |
430 | | /** @} */ |
431 | | |
432 | | #ifndef __cplusplus |
433 | | /** |
434 | | * \defgroup latch Latches |
435 | | * |
436 | | * The latch is a downward counter used to synchronise threads. |
437 | | * |
438 | | * @{ |
439 | | */ |
440 | | /** |
441 | | * Latch. |
442 | | * |
443 | | * Storage space for a thread-safe latch. |
444 | | */ |
445 | | typedef struct |
446 | | { |
447 | | atomic_size_t value; |
448 | | atomic_uint ready; |
449 | | } vlc_latch_t; |
450 | | |
451 | | /** |
452 | | * Initializes a latch. |
453 | | * |
454 | | * @param latch a latch instance |
455 | | * @param value initial latch value (typically 1) |
456 | | */ |
457 | | VLC_API void vlc_latch_init(vlc_latch_t *latch, size_t value); |
458 | | |
459 | | /** |
460 | | * Decrements the value of a latch. |
461 | | * |
462 | | * This function atomically decrements the value of a latch by the given |
463 | | * quantity. If the result is zero, then any thread waiting on the latch is |
464 | | * woken up. |
465 | | * |
466 | | * \warning If the result is (arithmetically) strictly negative, the behaviour |
467 | | * is undefined. |
468 | | * |
469 | | * \param latch an initialized latch |
470 | | * \param n quantity to subtract from the latch value (typically 1) |
471 | | * |
472 | | * \note This function is not a cancellation point. |
473 | | */ |
474 | | VLC_API void vlc_latch_count_down(vlc_latch_t *latch, size_t n); |
475 | | |
476 | | /** |
477 | | * Decrements the value of a latch and waits on it. |
478 | | * |
479 | | * This function atomically decrements the value of a latch by the given |
480 | | * quantity. Then, if the result of the subtraction is strictly positive, |
481 | | * it waits until the value reaches zero. |
482 | | * |
483 | | * This function is equivalent to the succession of vlc_latch_count_down() |
484 | | * then vlc_latch_wait(), and is only an optimisation to combine the two. |
485 | | * |
486 | | * \warning If the result is strictly negative, the behaviour is undefined. |
487 | | * |
488 | | * \param latch an initialized latch |
489 | | * \param n number of times to decrement the value (typically 1) |
490 | | * |
491 | | * \note This function may be a cancellation point. |
492 | | */ |
493 | | VLC_API void vlc_latch_count_down_and_wait(vlc_latch_t *latch, size_t n); |
494 | | |
495 | | /** |
496 | | * Checks if a latch is ready. |
497 | | * |
498 | | * This function compares the value of a latch with zero. |
499 | | * |
500 | | * \retval false if the latch value is non-zero |
501 | | * \retval true if the latch value equals zero |
502 | | */ |
503 | | VLC_API bool vlc_latch_is_ready(const vlc_latch_t *latch) VLC_USED; |
504 | | |
505 | | /** |
506 | | * Waits on a latch. |
507 | | * |
508 | | * This function waits until the value of the latch reaches zero. |
509 | | * |
510 | | * \note This function may be a point of cancellation. |
511 | | */ |
512 | | VLC_API void vlc_latch_wait(vlc_latch_t *); |
513 | | |
514 | | /** @} */ |
515 | | |
516 | | /** |
517 | | * One-time initialization. |
518 | | * |
519 | | * A one-time initialization object must always be initialized assigned to |
520 | | * \ref VLC_STATIC_ONCE before use. |
521 | | */ |
522 | | typedef struct |
523 | | { |
524 | | atomic_uint value; |
525 | | } vlc_once_t; |
526 | | |
527 | | /** |
528 | | * Static initializer for one-time initialization. |
529 | | */ |
530 | | #define VLC_STATIC_ONCE { 0 } |
531 | | |
532 | | /** |
533 | | * Begins a one-time initialization. |
534 | | * |
535 | | * This function checks if a one-time initialization has completed: |
536 | | * - If this is the first time the function is called for the given one-time |
537 | | * initialization object, it marks the beginning of the initialization and |
538 | | * returns true. vlc_once_complete() must be called to mark the completion |
539 | | * of the initialisation. |
540 | | * - Otherwise, it waits until the initialization completes and returns false. |
541 | | * - In particular, if the initialization has already completed, the function |
542 | | * returns false immediately without actually waiting. |
543 | | * |
544 | | * The specified one-time initialization object must have been initialized |
545 | | * with @ref VLC_STATIC_ONCE, which is a constant expression suitable as a |
546 | | * static initializer. |
547 | | * |
548 | | * \warning If this function is called twice without an intervening call to |
549 | | * vlc_once_complete(), a dead lock will occur. |
550 | | * |
551 | | * \param once one-time initialisation object |
552 | | * \retval false on the first call (for the given object) |
553 | | * \retval true on subsequent calls (for the given object) |
554 | | */ |
555 | | VLC_API bool vlc_once_begin(vlc_once_t *restrict once); |
556 | | |
557 | | static inline bool vlc_once_begin_inline(vlc_once_t *restrict once) |
558 | 0 | { |
559 | 0 | /* Fast path: check if already initialized */ |
560 | 0 | if (unlikely(atomic_load_explicit(&once->value, memory_order_acquire) < 3)) |
561 | 0 | return vlc_once_begin(once); |
562 | 0 | return true; |
563 | 0 | } Unexecuted instantiation: demux-run.c:vlc_once_begin_inline Unexecuted instantiation: common.c:vlc_once_begin_inline Unexecuted instantiation: var.c:vlc_once_begin_inline Unexecuted instantiation: decoder.c:vlc_once_begin_inline Unexecuted instantiation: core.c:vlc_once_begin_inline Unexecuted instantiation: error.c:vlc_once_begin_inline Unexecuted instantiation: aiff.c:vlc_once_begin_inline Unexecuted instantiation: asf.c:vlc_once_begin_inline Unexecuted instantiation: libasf.c:vlc_once_begin_inline Unexecuted instantiation: asfpacket.c:vlc_once_begin_inline Unexecuted instantiation: au.c:vlc_once_begin_inline Unexecuted instantiation: avi.c:vlc_once_begin_inline Unexecuted instantiation: libavi.c:vlc_once_begin_inline Unexecuted instantiation: caf.c:vlc_once_begin_inline Unexecuted instantiation: cdg.c:vlc_once_begin_inline Unexecuted instantiation: es.c:vlc_once_begin_inline Unexecuted instantiation: dts_header.c:vlc_once_begin_inline Unexecuted instantiation: flac.c:vlc_once_begin_inline Unexecuted instantiation: xiph_metadata.c:vlc_once_begin_inline Unexecuted instantiation: h26x.c:vlc_once_begin_inline Unexecuted instantiation: mjpeg.c:vlc_once_begin_inline Unexecuted instantiation: mp4.c:vlc_once_begin_inline Unexecuted instantiation: fragments.c:vlc_once_begin_inline Unexecuted instantiation: attachments.c:vlc_once_begin_inline Unexecuted instantiation: heif.c:vlc_once_begin_inline Unexecuted instantiation: essetup.c:vlc_once_begin_inline Unexecuted instantiation: meta.c:vlc_once_begin_inline Unexecuted instantiation: libmp4.c:vlc_once_begin_inline Unexecuted instantiation: nsv.c:vlc_once_begin_inline Unexecuted instantiation: ps.c:vlc_once_begin_inline Unexecuted instantiation: pva.c:vlc_once_begin_inline Unexecuted instantiation: sap.c:vlc_once_begin_inline Unexecuted instantiation: smf.c:vlc_once_begin_inline Unexecuted instantiation: subtitle.c:vlc_once_begin_inline Unexecuted instantiation: tta.c:vlc_once_begin_inline Unexecuted instantiation: encttml.c:vlc_once_begin_inline Unexecuted instantiation: substtml.c:vlc_once_begin_inline Unexecuted instantiation: ttml.c:vlc_once_begin_inline Unexecuted instantiation: ty.c:vlc_once_begin_inline Unexecuted instantiation: voc.c:vlc_once_begin_inline Unexecuted instantiation: wav.c:vlc_once_begin_inline Unexecuted instantiation: webvtt.c:vlc_once_begin_inline Unexecuted instantiation: encvtt.c:vlc_once_begin_inline Unexecuted instantiation: subsvtt.c:vlc_once_begin_inline Unexecuted instantiation: xa.c:vlc_once_begin_inline Unexecuted instantiation: a52.c:vlc_once_begin_inline Unexecuted instantiation: copy.c:vlc_once_begin_inline Unexecuted instantiation: dts.c:vlc_once_begin_inline Unexecuted instantiation: h264.c:vlc_once_begin_inline Unexecuted instantiation: hxxx_sei.c:vlc_once_begin_inline Unexecuted instantiation: hxxx_common.c:vlc_once_begin_inline Unexecuted instantiation: h264_nal.c:vlc_once_begin_inline Unexecuted instantiation: h264_slice.c:vlc_once_begin_inline Unexecuted instantiation: hevc.c:vlc_once_begin_inline Unexecuted instantiation: hevc_nal.c:vlc_once_begin_inline Unexecuted instantiation: mlp.c:vlc_once_begin_inline Unexecuted instantiation: mpeg4audio.c:vlc_once_begin_inline Unexecuted instantiation: mpeg4video.c:vlc_once_begin_inline Unexecuted instantiation: mpegaudio.c:vlc_once_begin_inline Unexecuted instantiation: mpegvideo.c:vlc_once_begin_inline Unexecuted instantiation: vc1.c:vlc_once_begin_inline Unexecuted instantiation: rawaud.c:vlc_once_begin_inline Unexecuted instantiation: rawvid.c:vlc_once_begin_inline Unexecuted instantiation: file.c:vlc_once_begin_inline Unexecuted instantiation: directory.c:vlc_once_begin_inline Unexecuted instantiation: libxml.c:vlc_once_begin_inline Unexecuted instantiation: ogg.c:vlc_once_begin_inline Unexecuted instantiation: oggseek.c:vlc_once_begin_inline Unexecuted instantiation: adpcm.c:vlc_once_begin_inline Unexecuted instantiation: aes3.c:vlc_once_begin_inline Unexecuted instantiation: araw.c:vlc_once_begin_inline Unexecuted instantiation: g711.c:vlc_once_begin_inline Unexecuted instantiation: lpcm.c:vlc_once_begin_inline Unexecuted instantiation: uleaddvaudio.c:vlc_once_begin_inline Unexecuted instantiation: rawvideo.c:vlc_once_begin_inline Unexecuted instantiation: cc.c:vlc_once_begin_inline Unexecuted instantiation: cea708.c:vlc_once_begin_inline Unexecuted instantiation: cvdsub.c:vlc_once_begin_inline Unexecuted instantiation: dvbsub.c:vlc_once_begin_inline Unexecuted instantiation: scte18.c:vlc_once_begin_inline Unexecuted instantiation: scte27.c:vlc_once_begin_inline Unexecuted instantiation: spudec.c:vlc_once_begin_inline Unexecuted instantiation: parse.c:vlc_once_begin_inline Unexecuted instantiation: stl.c:vlc_once_begin_inline Unexecuted instantiation: subsdec.c:vlc_once_begin_inline Unexecuted instantiation: subsusf.c:vlc_once_begin_inline Unexecuted instantiation: svcdsub.c:vlc_once_begin_inline Unexecuted instantiation: textst.c:vlc_once_begin_inline Unexecuted instantiation: substx3g.c:vlc_once_begin_inline Unexecuted instantiation: libvlc.c:vlc_once_begin_inline Unexecuted instantiation: chain.c:vlc_once_begin_inline Unexecuted instantiation: help.c:vlc_once_begin_inline Unexecuted instantiation: cmdline.c:vlc_once_begin_inline Unexecuted instantiation: media_source.c:vlc_once_begin_inline Unexecuted instantiation: media_tree.c:vlc_once_begin_inline Unexecuted instantiation: modules.c:vlc_once_begin_inline Unexecuted instantiation: bank.c:vlc_once_begin_inline Unexecuted instantiation: entry.c:vlc_once_begin_inline Unexecuted instantiation: dialog.c:vlc_once_begin_inline Unexecuted instantiation: interface.c:vlc_once_begin_inline Unexecuted instantiation: content.c:vlc_once_begin_inline Unexecuted instantiation: control.c:vlc_once_begin_inline Unexecuted instantiation: item.c:vlc_once_begin_inline Unexecuted instantiation: notify.c:vlc_once_begin_inline Unexecuted instantiation: player.c:vlc_once_begin_inline Unexecuted instantiation: playlist.c:vlc_once_begin_inline Unexecuted instantiation: preparse.c:vlc_once_begin_inline Unexecuted instantiation: preparser.c:vlc_once_begin_inline Unexecuted instantiation: access.c:vlc_once_begin_inline Unexecuted instantiation: decoder_device.c:vlc_once_begin_inline Unexecuted instantiation: decoder_helpers.c:vlc_once_begin_inline Unexecuted instantiation: demux.c:vlc_once_begin_inline Unexecuted instantiation: input.c:vlc_once_begin_inline Unexecuted instantiation: attachment.c:vlc_once_begin_inline Unexecuted instantiation: timer.c:vlc_once_begin_inline Unexecuted instantiation: track.c:vlc_once_begin_inline Unexecuted instantiation: title.c:vlc_once_begin_inline Unexecuted instantiation: aout.c:vlc_once_begin_inline Unexecuted instantiation: vout.c:vlc_once_begin_inline Unexecuted instantiation: osd.c:vlc_once_begin_inline Unexecuted instantiation: medialib.c:vlc_once_begin_inline Unexecuted instantiation: resource.c:vlc_once_begin_inline Unexecuted instantiation: services_discovery.c:vlc_once_begin_inline Unexecuted instantiation: stats.c:vlc_once_begin_inline Unexecuted instantiation: stream.c:vlc_once_begin_inline Unexecuted instantiation: stream_extractor.c:vlc_once_begin_inline Unexecuted instantiation: stream_filter.c:vlc_once_begin_inline Unexecuted instantiation: stream_memory.c:vlc_once_begin_inline Unexecuted instantiation: subtitles.c:vlc_once_begin_inline Unexecuted instantiation: dec.c:vlc_once_begin_inline Unexecuted instantiation: filters.c:vlc_once_begin_inline Unexecuted instantiation: meter.c:vlc_once_begin_inline Unexecuted instantiation: output.c:vlc_once_begin_inline Unexecuted instantiation: volume.c:vlc_once_begin_inline Unexecuted instantiation: video_output.c:vlc_once_begin_inline Unexecuted instantiation: video_text.c:vlc_once_begin_inline Unexecuted instantiation: video_widgets.c:vlc_once_begin_inline Unexecuted instantiation: vout_subpictures.c:vlc_once_begin_inline Unexecuted instantiation: video_window.c:vlc_once_begin_inline Unexecuted instantiation: window.c:vlc_once_begin_inline Unexecuted instantiation: vout_intf.c:vlc_once_begin_inline Unexecuted instantiation: charset.c:vlc_once_begin_inline Unexecuted instantiation: strings.c:vlc_once_begin_inline Unexecuted instantiation: unicode.c:vlc_once_begin_inline Unexecuted instantiation: actions.c:vlc_once_begin_inline Unexecuted instantiation: executor.c:vlc_once_begin_inline Unexecuted instantiation: probe.c:vlc_once_begin_inline Unexecuted instantiation: frame.c:vlc_once_begin_inline Unexecuted instantiation: fifo.c:vlc_once_begin_inline Unexecuted instantiation: picture.c:vlc_once_begin_inline Unexecuted instantiation: picture_fifo.c:vlc_once_begin_inline Unexecuted instantiation: picture_pool.c:vlc_once_begin_inline Unexecuted instantiation: interrupt.c:vlc_once_begin_inline Unexecuted instantiation: keystore.c:vlc_once_begin_inline Unexecuted instantiation: rcu.c:vlc_once_begin_inline Unexecuted instantiation: renderer_discovery.c:vlc_once_begin_inline Unexecuted instantiation: threads.c:vlc_once_begin_inline Unexecuted instantiation: cpu.c:vlc_once_begin_inline Unexecuted instantiation: exit.c:vlc_once_begin_inline Unexecuted instantiation: image.c:vlc_once_begin_inline Unexecuted instantiation: messages.c:vlc_once_begin_inline Unexecuted instantiation: tracer.c:vlc_once_begin_inline Unexecuted instantiation: objects.c:vlc_once_begin_inline Unexecuted instantiation: objres.c:vlc_once_begin_inline Unexecuted instantiation: queue.c:vlc_once_begin_inline Unexecuted instantiation: variables.c:vlc_once_begin_inline Unexecuted instantiation: xml.c:vlc_once_begin_inline Unexecuted instantiation: filter.c:vlc_once_begin_inline Unexecuted instantiation: filter_chain.c:vlc_once_begin_inline Unexecuted instantiation: httpcookies.c:vlc_once_begin_inline Unexecuted instantiation: subpicture.c:vlc_once_begin_inline Unexecuted instantiation: medialibrary.c:vlc_once_begin_inline Unexecuted instantiation: thread.c:vlc_once_begin_inline Unexecuted instantiation: rand.c:vlc_once_begin_inline Unexecuted instantiation: specific.c:vlc_once_begin_inline Unexecuted instantiation: stream_output.c:vlc_once_begin_inline Unexecuted instantiation: vlm.c:vlc_once_begin_inline Unexecuted instantiation: vlm_event.c:vlc_once_begin_inline Unexecuted instantiation: vlmshell.c:vlc_once_begin_inline Unexecuted instantiation: libvlc-module.c:vlc_once_begin_inline Unexecuted instantiation: art.c:vlc_once_begin_inline Unexecuted instantiation: fetcher.c:vlc_once_begin_inline Unexecuted instantiation: clock.c:vlc_once_begin_inline Unexecuted instantiation: es_out.c:vlc_once_begin_inline Unexecuted instantiation: es_out_source.c:vlc_once_begin_inline Unexecuted instantiation: es_out_timeshift.c:vlc_once_begin_inline Unexecuted instantiation: display.c:vlc_once_begin_inline Unexecuted instantiation: inhibit.c:vlc_once_begin_inline Unexecuted instantiation: interlacing.c:vlc_once_begin_inline Unexecuted instantiation: snapshot.c:vlc_once_begin_inline Unexecuted instantiation: io.c:vlc_once_begin_inline Unexecuted instantiation: chroma_probe.c:vlc_once_begin_inline Unexecuted instantiation: dirs.c:vlc_once_begin_inline Unexecuted instantiation: getaddrinfo.c:vlc_once_begin_inline Unexecuted instantiation: input_clock.c:vlc_once_begin_inline |
564 | | #define vlc_once_begin(once) vlc_once_begin_inline(once) |
565 | | |
566 | | /** |
567 | | * Completes a one-time initialization. |
568 | | * |
569 | | * This function marks the end of an ongoing one-time initialization. |
570 | | * If any thread is waiting for the completion of that initialization, its |
571 | | * execution will be resumed. |
572 | | * |
573 | | * \warning The behavior is undefined if the one-time initialization object |
574 | | * is uninitialized, if one-time initialization has not started, or |
575 | | * if one-time initialization has already completed. |
576 | | * |
577 | | * \param once one-time initialisation object |
578 | | */ |
579 | | VLC_API void vlc_once_complete(vlc_once_t *restrict once); |
580 | | |
581 | | /** |
582 | | * Executes a function one time. |
583 | | * |
584 | | * The first time this function is called with a given one-time initialization |
585 | | * object, it executes the provided callback with the provided data pointer as |
586 | | * sole parameter. Any further call with the same object will be a no-op. |
587 | | * |
588 | | * In the corner case that the first time execution is ongoing in another |
589 | | * thread, then the function will wait for completion on the other thread |
590 | | * (and then synchronize memory) before it returns. |
591 | | * This ensures that, no matter what, the callback has been executed exactly |
592 | | * once and its side effects are visible after the function returns. |
593 | | * |
594 | | * \param once a one-time initialization object |
595 | | * \param cb callback to execute (the first time) |
596 | | * \param opaque data pointer for the callback |
597 | | */ |
598 | | static inline void vlc_once(vlc_once_t *restrict once, void (*cb)(void *), |
599 | | void *opaque) |
600 | 0 | { |
601 | 0 | if (unlikely(!vlc_once_begin(once))) { |
602 | 0 | cb(opaque); |
603 | 0 | vlc_once_complete(once); |
604 | 0 | } |
605 | 0 | } Unexecuted instantiation: demux-run.c:vlc_once Unexecuted instantiation: common.c:vlc_once Unexecuted instantiation: var.c:vlc_once Unexecuted instantiation: decoder.c:vlc_once Unexecuted instantiation: core.c:vlc_once Unexecuted instantiation: error.c:vlc_once Unexecuted instantiation: aiff.c:vlc_once Unexecuted instantiation: asf.c:vlc_once Unexecuted instantiation: libasf.c:vlc_once Unexecuted instantiation: asfpacket.c:vlc_once Unexecuted instantiation: au.c:vlc_once Unexecuted instantiation: avi.c:vlc_once Unexecuted instantiation: libavi.c:vlc_once Unexecuted instantiation: caf.c:vlc_once Unexecuted instantiation: cdg.c:vlc_once Unexecuted instantiation: es.c:vlc_once Unexecuted instantiation: dts_header.c:vlc_once Unexecuted instantiation: flac.c:vlc_once Unexecuted instantiation: xiph_metadata.c:vlc_once Unexecuted instantiation: h26x.c:vlc_once Unexecuted instantiation: mjpeg.c:vlc_once Unexecuted instantiation: mp4.c:vlc_once Unexecuted instantiation: fragments.c:vlc_once Unexecuted instantiation: attachments.c:vlc_once Unexecuted instantiation: heif.c:vlc_once Unexecuted instantiation: essetup.c:vlc_once Unexecuted instantiation: meta.c:vlc_once Unexecuted instantiation: libmp4.c:vlc_once Unexecuted instantiation: nsv.c:vlc_once Unexecuted instantiation: ps.c:vlc_once Unexecuted instantiation: pva.c:vlc_once Unexecuted instantiation: sap.c:vlc_once Unexecuted instantiation: smf.c:vlc_once Unexecuted instantiation: subtitle.c:vlc_once Unexecuted instantiation: tta.c:vlc_once Unexecuted instantiation: encttml.c:vlc_once Unexecuted instantiation: substtml.c:vlc_once Unexecuted instantiation: ttml.c:vlc_once Unexecuted instantiation: ty.c:vlc_once Unexecuted instantiation: voc.c:vlc_once Unexecuted instantiation: wav.c:vlc_once Unexecuted instantiation: webvtt.c:vlc_once Unexecuted instantiation: encvtt.c:vlc_once Unexecuted instantiation: subsvtt.c:vlc_once Unexecuted instantiation: xa.c:vlc_once Unexecuted instantiation: a52.c:vlc_once Unexecuted instantiation: copy.c:vlc_once Unexecuted instantiation: dts.c:vlc_once Unexecuted instantiation: h264.c:vlc_once Unexecuted instantiation: hxxx_sei.c:vlc_once Unexecuted instantiation: hxxx_common.c:vlc_once Unexecuted instantiation: h264_nal.c:vlc_once Unexecuted instantiation: h264_slice.c:vlc_once Unexecuted instantiation: hevc.c:vlc_once Unexecuted instantiation: hevc_nal.c:vlc_once Unexecuted instantiation: mlp.c:vlc_once Unexecuted instantiation: mpeg4audio.c:vlc_once Unexecuted instantiation: mpeg4video.c:vlc_once Unexecuted instantiation: mpegaudio.c:vlc_once Unexecuted instantiation: mpegvideo.c:vlc_once Unexecuted instantiation: vc1.c:vlc_once Unexecuted instantiation: rawaud.c:vlc_once Unexecuted instantiation: rawvid.c:vlc_once Unexecuted instantiation: file.c:vlc_once Unexecuted instantiation: directory.c:vlc_once Unexecuted instantiation: libxml.c:vlc_once Unexecuted instantiation: ogg.c:vlc_once Unexecuted instantiation: oggseek.c:vlc_once Unexecuted instantiation: adpcm.c:vlc_once Unexecuted instantiation: aes3.c:vlc_once Unexecuted instantiation: araw.c:vlc_once Unexecuted instantiation: g711.c:vlc_once Unexecuted instantiation: lpcm.c:vlc_once Unexecuted instantiation: uleaddvaudio.c:vlc_once Unexecuted instantiation: rawvideo.c:vlc_once Unexecuted instantiation: cc.c:vlc_once Unexecuted instantiation: cea708.c:vlc_once Unexecuted instantiation: cvdsub.c:vlc_once Unexecuted instantiation: dvbsub.c:vlc_once Unexecuted instantiation: scte18.c:vlc_once Unexecuted instantiation: scte27.c:vlc_once Unexecuted instantiation: spudec.c:vlc_once Unexecuted instantiation: parse.c:vlc_once Unexecuted instantiation: stl.c:vlc_once Unexecuted instantiation: subsdec.c:vlc_once Unexecuted instantiation: subsusf.c:vlc_once Unexecuted instantiation: svcdsub.c:vlc_once Unexecuted instantiation: textst.c:vlc_once Unexecuted instantiation: substx3g.c:vlc_once Unexecuted instantiation: libvlc.c:vlc_once Unexecuted instantiation: chain.c:vlc_once Unexecuted instantiation: help.c:vlc_once Unexecuted instantiation: cmdline.c:vlc_once Unexecuted instantiation: media_source.c:vlc_once Unexecuted instantiation: media_tree.c:vlc_once Unexecuted instantiation: modules.c:vlc_once Unexecuted instantiation: bank.c:vlc_once Unexecuted instantiation: entry.c:vlc_once Unexecuted instantiation: dialog.c:vlc_once Unexecuted instantiation: interface.c:vlc_once Unexecuted instantiation: content.c:vlc_once Unexecuted instantiation: control.c:vlc_once Unexecuted instantiation: item.c:vlc_once Unexecuted instantiation: notify.c:vlc_once Unexecuted instantiation: player.c:vlc_once Unexecuted instantiation: playlist.c:vlc_once Unexecuted instantiation: preparse.c:vlc_once Unexecuted instantiation: preparser.c:vlc_once Unexecuted instantiation: access.c:vlc_once Unexecuted instantiation: decoder_device.c:vlc_once Unexecuted instantiation: decoder_helpers.c:vlc_once Unexecuted instantiation: demux.c:vlc_once Unexecuted instantiation: input.c:vlc_once Unexecuted instantiation: attachment.c:vlc_once Unexecuted instantiation: timer.c:vlc_once Unexecuted instantiation: track.c:vlc_once Unexecuted instantiation: title.c:vlc_once Unexecuted instantiation: aout.c:vlc_once Unexecuted instantiation: vout.c:vlc_once Unexecuted instantiation: osd.c:vlc_once Unexecuted instantiation: medialib.c:vlc_once Unexecuted instantiation: resource.c:vlc_once Unexecuted instantiation: services_discovery.c:vlc_once Unexecuted instantiation: stats.c:vlc_once Unexecuted instantiation: stream.c:vlc_once Unexecuted instantiation: stream_extractor.c:vlc_once Unexecuted instantiation: stream_filter.c:vlc_once Unexecuted instantiation: stream_memory.c:vlc_once Unexecuted instantiation: subtitles.c:vlc_once Unexecuted instantiation: dec.c:vlc_once Unexecuted instantiation: filters.c:vlc_once Unexecuted instantiation: meter.c:vlc_once Unexecuted instantiation: output.c:vlc_once Unexecuted instantiation: volume.c:vlc_once Unexecuted instantiation: video_output.c:vlc_once Unexecuted instantiation: video_text.c:vlc_once Unexecuted instantiation: video_widgets.c:vlc_once Unexecuted instantiation: vout_subpictures.c:vlc_once Unexecuted instantiation: video_window.c:vlc_once Unexecuted instantiation: window.c:vlc_once Unexecuted instantiation: vout_intf.c:vlc_once Unexecuted instantiation: charset.c:vlc_once Unexecuted instantiation: strings.c:vlc_once Unexecuted instantiation: unicode.c:vlc_once Unexecuted instantiation: actions.c:vlc_once Unexecuted instantiation: executor.c:vlc_once Unexecuted instantiation: probe.c:vlc_once Unexecuted instantiation: frame.c:vlc_once Unexecuted instantiation: fifo.c:vlc_once Unexecuted instantiation: picture.c:vlc_once Unexecuted instantiation: picture_fifo.c:vlc_once Unexecuted instantiation: picture_pool.c:vlc_once Unexecuted instantiation: interrupt.c:vlc_once Unexecuted instantiation: keystore.c:vlc_once Unexecuted instantiation: rcu.c:vlc_once Unexecuted instantiation: renderer_discovery.c:vlc_once Unexecuted instantiation: threads.c:vlc_once Unexecuted instantiation: cpu.c:vlc_once Unexecuted instantiation: exit.c:vlc_once Unexecuted instantiation: image.c:vlc_once Unexecuted instantiation: messages.c:vlc_once Unexecuted instantiation: tracer.c:vlc_once Unexecuted instantiation: objects.c:vlc_once Unexecuted instantiation: objres.c:vlc_once Unexecuted instantiation: queue.c:vlc_once Unexecuted instantiation: variables.c:vlc_once Unexecuted instantiation: xml.c:vlc_once Unexecuted instantiation: filter.c:vlc_once Unexecuted instantiation: filter_chain.c:vlc_once Unexecuted instantiation: httpcookies.c:vlc_once Unexecuted instantiation: subpicture.c:vlc_once Unexecuted instantiation: medialibrary.c:vlc_once Unexecuted instantiation: thread.c:vlc_once Unexecuted instantiation: rand.c:vlc_once Unexecuted instantiation: specific.c:vlc_once Unexecuted instantiation: stream_output.c:vlc_once Unexecuted instantiation: vlm.c:vlc_once Unexecuted instantiation: vlm_event.c:vlc_once Unexecuted instantiation: vlmshell.c:vlc_once Unexecuted instantiation: libvlc-module.c:vlc_once Unexecuted instantiation: art.c:vlc_once Unexecuted instantiation: fetcher.c:vlc_once Unexecuted instantiation: clock.c:vlc_once Unexecuted instantiation: es_out.c:vlc_once Unexecuted instantiation: es_out_source.c:vlc_once Unexecuted instantiation: es_out_timeshift.c:vlc_once Unexecuted instantiation: display.c:vlc_once Unexecuted instantiation: inhibit.c:vlc_once Unexecuted instantiation: interlacing.c:vlc_once Unexecuted instantiation: snapshot.c:vlc_once Unexecuted instantiation: io.c:vlc_once Unexecuted instantiation: chroma_probe.c:vlc_once Unexecuted instantiation: dirs.c:vlc_once Unexecuted instantiation: getaddrinfo.c:vlc_once Unexecuted instantiation: input_clock.c:vlc_once |
606 | | #endif |
607 | | |
608 | | /** |
609 | | * \defgroup threadvar Thread-specific variables |
610 | | * @{ |
611 | | */ |
612 | | /** |
613 | | * Allocates a thread-specific variable. |
614 | | * |
615 | | * @param key where to store the thread-specific variable handle |
616 | | * @param destr a destruction callback. It is called whenever a thread exits |
617 | | * and the thread-specific variable has a non-NULL value. |
618 | | * |
619 | | * @return 0 on success, a system error code otherwise. |
620 | | * This function can actually fail: on most systems, there is a fixed limit to |
621 | | * the number of thread-specific variables in a given process. |
622 | | */ |
623 | | VLC_API int vlc_threadvar_create(vlc_threadvar_t *key, void (*destr) (void *)); |
624 | | |
625 | | /** |
626 | | * Deallocates a thread-specific variable. |
627 | | */ |
628 | | VLC_API void vlc_threadvar_delete(vlc_threadvar_t *); |
629 | | |
630 | | /** |
631 | | * Sets a thread-specific variable. |
632 | | |
633 | | * \param key thread-local variable key (created with vlc_threadvar_create()) |
634 | | * \param value new value for the variable for the calling thread |
635 | | * \return 0 on success, a system error code otherwise. |
636 | | */ |
637 | | VLC_API int vlc_threadvar_set(vlc_threadvar_t key, void *value); |
638 | | |
639 | | /** |
640 | | * Gets the value of a thread-local variable for the calling thread. |
641 | | * This function cannot fail. |
642 | | * |
643 | | * \return the value associated with the given variable for the calling |
644 | | * or NULL if no value was set. |
645 | | */ |
646 | | VLC_API void *vlc_threadvar_get(vlc_threadvar_t); |
647 | | |
648 | | /** @} */ |
649 | | |
650 | | /** |
651 | | * Creates and starts a new thread. |
652 | | * |
653 | | * The thread must be <i>joined</i> with vlc_join() to reclaim resources |
654 | | * when it is not needed anymore. |
655 | | * |
656 | | * @param th storage space for the handle of the new thread (cannot be NULL) |
657 | | * [OUT] |
658 | | * @param entry entry point for the thread |
659 | | * @param data data parameter given to the entry point |
660 | | * @return 0 on success, a standard error code on error. |
661 | | * @note In case of error, the value of *th is undefined. |
662 | | */ |
663 | | VLC_API int vlc_clone(vlc_thread_t *th, void *(*entry)(void *), |
664 | | void *data) VLC_USED; |
665 | | |
666 | | #if defined(__GNUC__) |
667 | | static |
668 | | VLC_UNUSED_FUNC |
669 | | VLC_WARN_CALL("thread name too big") |
670 | | const char * vlc_thread_name_too_big( const char * thread_name ) |
671 | 0 | { |
672 | 0 | return thread_name; |
673 | 0 | } Unexecuted instantiation: demux-run.c:vlc_thread_name_too_big Unexecuted instantiation: common.c:vlc_thread_name_too_big Unexecuted instantiation: var.c:vlc_thread_name_too_big Unexecuted instantiation: decoder.c:vlc_thread_name_too_big Unexecuted instantiation: core.c:vlc_thread_name_too_big Unexecuted instantiation: error.c:vlc_thread_name_too_big Unexecuted instantiation: aiff.c:vlc_thread_name_too_big Unexecuted instantiation: asf.c:vlc_thread_name_too_big Unexecuted instantiation: libasf.c:vlc_thread_name_too_big Unexecuted instantiation: asfpacket.c:vlc_thread_name_too_big Unexecuted instantiation: au.c:vlc_thread_name_too_big Unexecuted instantiation: avi.c:vlc_thread_name_too_big Unexecuted instantiation: libavi.c:vlc_thread_name_too_big Unexecuted instantiation: caf.c:vlc_thread_name_too_big Unexecuted instantiation: cdg.c:vlc_thread_name_too_big Unexecuted instantiation: es.c:vlc_thread_name_too_big Unexecuted instantiation: dts_header.c:vlc_thread_name_too_big Unexecuted instantiation: flac.c:vlc_thread_name_too_big Unexecuted instantiation: xiph_metadata.c:vlc_thread_name_too_big Unexecuted instantiation: h26x.c:vlc_thread_name_too_big Unexecuted instantiation: mjpeg.c:vlc_thread_name_too_big Unexecuted instantiation: mp4.c:vlc_thread_name_too_big Unexecuted instantiation: fragments.c:vlc_thread_name_too_big Unexecuted instantiation: attachments.c:vlc_thread_name_too_big Unexecuted instantiation: heif.c:vlc_thread_name_too_big Unexecuted instantiation: essetup.c:vlc_thread_name_too_big Unexecuted instantiation: meta.c:vlc_thread_name_too_big Unexecuted instantiation: libmp4.c:vlc_thread_name_too_big Unexecuted instantiation: nsv.c:vlc_thread_name_too_big Unexecuted instantiation: ps.c:vlc_thread_name_too_big Unexecuted instantiation: pva.c:vlc_thread_name_too_big Unexecuted instantiation: sap.c:vlc_thread_name_too_big Unexecuted instantiation: smf.c:vlc_thread_name_too_big Unexecuted instantiation: subtitle.c:vlc_thread_name_too_big Unexecuted instantiation: tta.c:vlc_thread_name_too_big Unexecuted instantiation: encttml.c:vlc_thread_name_too_big Unexecuted instantiation: substtml.c:vlc_thread_name_too_big Unexecuted instantiation: ttml.c:vlc_thread_name_too_big Unexecuted instantiation: ty.c:vlc_thread_name_too_big Unexecuted instantiation: voc.c:vlc_thread_name_too_big Unexecuted instantiation: wav.c:vlc_thread_name_too_big Unexecuted instantiation: webvtt.c:vlc_thread_name_too_big Unexecuted instantiation: encvtt.c:vlc_thread_name_too_big Unexecuted instantiation: subsvtt.c:vlc_thread_name_too_big Unexecuted instantiation: xa.c:vlc_thread_name_too_big Unexecuted instantiation: a52.c:vlc_thread_name_too_big Unexecuted instantiation: copy.c:vlc_thread_name_too_big Unexecuted instantiation: dts.c:vlc_thread_name_too_big Unexecuted instantiation: h264.c:vlc_thread_name_too_big Unexecuted instantiation: hxxx_sei.c:vlc_thread_name_too_big Unexecuted instantiation: hxxx_common.c:vlc_thread_name_too_big Unexecuted instantiation: h264_nal.c:vlc_thread_name_too_big Unexecuted instantiation: h264_slice.c:vlc_thread_name_too_big Unexecuted instantiation: hevc.c:vlc_thread_name_too_big Unexecuted instantiation: hevc_nal.c:vlc_thread_name_too_big Unexecuted instantiation: mlp.c:vlc_thread_name_too_big Unexecuted instantiation: mpeg4audio.c:vlc_thread_name_too_big Unexecuted instantiation: mpeg4video.c:vlc_thread_name_too_big Unexecuted instantiation: mpegaudio.c:vlc_thread_name_too_big Unexecuted instantiation: mpegvideo.c:vlc_thread_name_too_big Unexecuted instantiation: vc1.c:vlc_thread_name_too_big Unexecuted instantiation: rawaud.c:vlc_thread_name_too_big Unexecuted instantiation: rawvid.c:vlc_thread_name_too_big Unexecuted instantiation: file.c:vlc_thread_name_too_big Unexecuted instantiation: directory.c:vlc_thread_name_too_big Unexecuted instantiation: libxml.c:vlc_thread_name_too_big Unexecuted instantiation: ogg.c:vlc_thread_name_too_big Unexecuted instantiation: oggseek.c:vlc_thread_name_too_big Unexecuted instantiation: mkv.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: util.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: virtual_segment.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: matroska_segment.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: matroska_segment_parse.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: matroska_segment_seeker.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: demux.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: events.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: Ebml_parser.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: chapters.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: chapter_command.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: chapter_command_dvd.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: chapter_command_script.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: chapter_command_script_common.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: stream_io_callback.cpp:vlc_thread_name_too_big(char const*) Unexecuted instantiation: adpcm.c:vlc_thread_name_too_big Unexecuted instantiation: aes3.c:vlc_thread_name_too_big Unexecuted instantiation: araw.c:vlc_thread_name_too_big Unexecuted instantiation: g711.c:vlc_thread_name_too_big Unexecuted instantiation: lpcm.c:vlc_thread_name_too_big Unexecuted instantiation: uleaddvaudio.c:vlc_thread_name_too_big Unexecuted instantiation: rawvideo.c:vlc_thread_name_too_big Unexecuted instantiation: cc.c:vlc_thread_name_too_big Unexecuted instantiation: cea708.c:vlc_thread_name_too_big Unexecuted instantiation: cvdsub.c:vlc_thread_name_too_big Unexecuted instantiation: dvbsub.c:vlc_thread_name_too_big Unexecuted instantiation: scte18.c:vlc_thread_name_too_big Unexecuted instantiation: scte27.c:vlc_thread_name_too_big Unexecuted instantiation: spudec.c:vlc_thread_name_too_big Unexecuted instantiation: parse.c:vlc_thread_name_too_big Unexecuted instantiation: stl.c:vlc_thread_name_too_big Unexecuted instantiation: subsdec.c:vlc_thread_name_too_big Unexecuted instantiation: subsusf.c:vlc_thread_name_too_big Unexecuted instantiation: svcdsub.c:vlc_thread_name_too_big Unexecuted instantiation: textst.c:vlc_thread_name_too_big Unexecuted instantiation: substx3g.c:vlc_thread_name_too_big Unexecuted instantiation: libvlc.c:vlc_thread_name_too_big Unexecuted instantiation: chain.c:vlc_thread_name_too_big Unexecuted instantiation: help.c:vlc_thread_name_too_big Unexecuted instantiation: cmdline.c:vlc_thread_name_too_big Unexecuted instantiation: media_source.c:vlc_thread_name_too_big Unexecuted instantiation: media_tree.c:vlc_thread_name_too_big Unexecuted instantiation: modules.c:vlc_thread_name_too_big Unexecuted instantiation: bank.c:vlc_thread_name_too_big Unexecuted instantiation: entry.c:vlc_thread_name_too_big Unexecuted instantiation: dialog.c:vlc_thread_name_too_big Unexecuted instantiation: interface.c:vlc_thread_name_too_big Unexecuted instantiation: content.c:vlc_thread_name_too_big Unexecuted instantiation: control.c:vlc_thread_name_too_big Unexecuted instantiation: item.c:vlc_thread_name_too_big Unexecuted instantiation: notify.c:vlc_thread_name_too_big Unexecuted instantiation: player.c:vlc_thread_name_too_big Unexecuted instantiation: playlist.c:vlc_thread_name_too_big Unexecuted instantiation: preparse.c:vlc_thread_name_too_big Unexecuted instantiation: preparser.c:vlc_thread_name_too_big Unexecuted instantiation: access.c:vlc_thread_name_too_big Unexecuted instantiation: decoder_device.c:vlc_thread_name_too_big Unexecuted instantiation: decoder_helpers.c:vlc_thread_name_too_big Unexecuted instantiation: demux.c:vlc_thread_name_too_big Unexecuted instantiation: input.c:vlc_thread_name_too_big Unexecuted instantiation: attachment.c:vlc_thread_name_too_big Unexecuted instantiation: timer.c:vlc_thread_name_too_big Unexecuted instantiation: track.c:vlc_thread_name_too_big Unexecuted instantiation: title.c:vlc_thread_name_too_big Unexecuted instantiation: aout.c:vlc_thread_name_too_big Unexecuted instantiation: vout.c:vlc_thread_name_too_big Unexecuted instantiation: osd.c:vlc_thread_name_too_big Unexecuted instantiation: medialib.c:vlc_thread_name_too_big Unexecuted instantiation: resource.c:vlc_thread_name_too_big Unexecuted instantiation: services_discovery.c:vlc_thread_name_too_big Unexecuted instantiation: stats.c:vlc_thread_name_too_big Unexecuted instantiation: stream.c:vlc_thread_name_too_big Unexecuted instantiation: stream_extractor.c:vlc_thread_name_too_big Unexecuted instantiation: stream_filter.c:vlc_thread_name_too_big Unexecuted instantiation: stream_memory.c:vlc_thread_name_too_big Unexecuted instantiation: subtitles.c:vlc_thread_name_too_big Unexecuted instantiation: dec.c:vlc_thread_name_too_big Unexecuted instantiation: filters.c:vlc_thread_name_too_big Unexecuted instantiation: meter.c:vlc_thread_name_too_big Unexecuted instantiation: output.c:vlc_thread_name_too_big Unexecuted instantiation: volume.c:vlc_thread_name_too_big Unexecuted instantiation: video_output.c:vlc_thread_name_too_big Unexecuted instantiation: video_text.c:vlc_thread_name_too_big Unexecuted instantiation: video_widgets.c:vlc_thread_name_too_big Unexecuted instantiation: vout_subpictures.c:vlc_thread_name_too_big Unexecuted instantiation: video_window.c:vlc_thread_name_too_big Unexecuted instantiation: window.c:vlc_thread_name_too_big Unexecuted instantiation: vout_intf.c:vlc_thread_name_too_big Unexecuted instantiation: charset.c:vlc_thread_name_too_big Unexecuted instantiation: strings.c:vlc_thread_name_too_big Unexecuted instantiation: unicode.c:vlc_thread_name_too_big Unexecuted instantiation: actions.c:vlc_thread_name_too_big Unexecuted instantiation: executor.c:vlc_thread_name_too_big Unexecuted instantiation: probe.c:vlc_thread_name_too_big Unexecuted instantiation: frame.c:vlc_thread_name_too_big Unexecuted instantiation: fifo.c:vlc_thread_name_too_big Unexecuted instantiation: picture.c:vlc_thread_name_too_big Unexecuted instantiation: picture_fifo.c:vlc_thread_name_too_big Unexecuted instantiation: picture_pool.c:vlc_thread_name_too_big Unexecuted instantiation: interrupt.c:vlc_thread_name_too_big Unexecuted instantiation: keystore.c:vlc_thread_name_too_big Unexecuted instantiation: rcu.c:vlc_thread_name_too_big Unexecuted instantiation: renderer_discovery.c:vlc_thread_name_too_big Unexecuted instantiation: threads.c:vlc_thread_name_too_big Unexecuted instantiation: cpu.c:vlc_thread_name_too_big Unexecuted instantiation: exit.c:vlc_thread_name_too_big Unexecuted instantiation: image.c:vlc_thread_name_too_big Unexecuted instantiation: messages.c:vlc_thread_name_too_big Unexecuted instantiation: tracer.c:vlc_thread_name_too_big Unexecuted instantiation: objects.c:vlc_thread_name_too_big Unexecuted instantiation: objres.c:vlc_thread_name_too_big Unexecuted instantiation: queue.c:vlc_thread_name_too_big Unexecuted instantiation: variables.c:vlc_thread_name_too_big Unexecuted instantiation: xml.c:vlc_thread_name_too_big Unexecuted instantiation: filter.c:vlc_thread_name_too_big Unexecuted instantiation: filter_chain.c:vlc_thread_name_too_big Unexecuted instantiation: httpcookies.c:vlc_thread_name_too_big Unexecuted instantiation: subpicture.c:vlc_thread_name_too_big Unexecuted instantiation: medialibrary.c:vlc_thread_name_too_big Unexecuted instantiation: thread.c:vlc_thread_name_too_big Unexecuted instantiation: rand.c:vlc_thread_name_too_big Unexecuted instantiation: specific.c:vlc_thread_name_too_big Unexecuted instantiation: stream_output.c:vlc_thread_name_too_big Unexecuted instantiation: vlm.c:vlc_thread_name_too_big Unexecuted instantiation: vlm_event.c:vlc_thread_name_too_big Unexecuted instantiation: vlmshell.c:vlc_thread_name_too_big Unexecuted instantiation: libvlc-module.c:vlc_thread_name_too_big Unexecuted instantiation: art.c:vlc_thread_name_too_big Unexecuted instantiation: fetcher.c:vlc_thread_name_too_big Unexecuted instantiation: clock.c:vlc_thread_name_too_big Unexecuted instantiation: es_out.c:vlc_thread_name_too_big Unexecuted instantiation: es_out_source.c:vlc_thread_name_too_big Unexecuted instantiation: es_out_timeshift.c:vlc_thread_name_too_big Unexecuted instantiation: display.c:vlc_thread_name_too_big Unexecuted instantiation: inhibit.c:vlc_thread_name_too_big Unexecuted instantiation: interlacing.c:vlc_thread_name_too_big Unexecuted instantiation: snapshot.c:vlc_thread_name_too_big Unexecuted instantiation: io.c:vlc_thread_name_too_big Unexecuted instantiation: chroma_probe.c:vlc_thread_name_too_big Unexecuted instantiation: dirs.c:vlc_thread_name_too_big Unexecuted instantiation: getaddrinfo.c:vlc_thread_name_too_big Unexecuted instantiation: input_clock.c:vlc_thread_name_too_big |
674 | | |
675 | | # define check_name_length( thread_name ) \ |
676 | 0 | ((__builtin_constant_p(__builtin_strlen(thread_name) > 15) && \ |
677 | 0 | __builtin_strlen(thread_name) > 15) \ |
678 | 0 | ? vlc_thread_name_too_big(thread_name): thread_name) |
679 | | #endif |
680 | | |
681 | | /** |
682 | | * Set the thread name of the current thread. |
683 | | * |
684 | | * \param name the string to use as the thread name |
685 | | * |
686 | | * \note On Linux the name can be up to 16-byte long, including the terminating |
687 | | * nul character. If larger, the name will be truncated. |
688 | | */ |
689 | | VLC_API void vlc_thread_set_name(const char *name); |
690 | | #if defined(check_name_length) |
691 | 0 | # define vlc_thread_set_name(name) vlc_thread_set_name(check_name_length(name)) |
692 | | #endif |
693 | | |
694 | | /** |
695 | | * Marks a thread as cancelled. |
696 | | * |
697 | | * Next time the target thread reaches a cancellation point (while not having |
698 | | * disabled cancellation), it will run its cancellation cleanup handler, the |
699 | | * thread variable destructors, and terminate. |
700 | | * |
701 | | * vlc_join() must be used regardless of a thread being cancelled or not, to |
702 | | * avoid leaking resources. |
703 | | */ |
704 | | VLC_API void vlc_cancel(vlc_thread_t); |
705 | | |
706 | | /** |
707 | | * Waits for a thread to complete (if needed), then destroys it. |
708 | | * |
709 | | * \note This is a cancellation point. In case of cancellation, the thread is |
710 | | * <b>not</b> joined. |
711 | | |
712 | | * \warning A thread cannot join itself (normally VLC will abort if this is |
713 | | * attempted). |
714 | | * |
715 | | * @param th thread handle |
716 | | * @param result [OUT] pointer to write the thread return value or NULL |
717 | | */ |
718 | | VLC_API void vlc_join(vlc_thread_t th, void **result); |
719 | | |
720 | | /** |
721 | | * Disables thread cancellation. |
722 | | * |
723 | | * This functions saves the current cancellation state (enabled or disabled), |
724 | | * then disables cancellation for the calling thread. It must be called before |
725 | | * entering a piece of code that is not cancellation-safe, unless it can be |
726 | | * proven that the calling thread will not be cancelled. |
727 | | * |
728 | | * \note This function is not a cancellation point. |
729 | | * |
730 | | * \return Previous cancellation state (opaque value for vlc_restorecancel()). |
731 | | */ |
732 | | VLC_API int vlc_savecancel(void); |
733 | | |
734 | | /** |
735 | | * Restores the cancellation state. |
736 | | * |
737 | | * This function restores the cancellation state of the calling thread to |
738 | | * a state previously saved by vlc_savecancel(). |
739 | | * |
740 | | * \note This function is not a cancellation point. |
741 | | * |
742 | | * \param state previous state as returned by vlc_savecancel(). |
743 | | */ |
744 | | VLC_API void vlc_restorecancel(int state); |
745 | | |
746 | | typedef struct vlc_cleanup_t vlc_cleanup_t; |
747 | | |
748 | | /** |
749 | | * Internal handler for thread cancellation. |
750 | | * |
751 | | * Do not call this function directly. Use wrapper macros instead: |
752 | | * vlc_cleanup_push(), vlc_cleanup_pop(). |
753 | | */ |
754 | | VLC_API void vlc_control_cancel(vlc_cleanup_t *); |
755 | | |
756 | | /** |
757 | | * Thread identifier. |
758 | | * |
759 | | * This function returns a non-zero unique identifier of the calling thread. |
760 | | * The identifier cannot change for the entire lifetime of the thread, and two |
761 | | * concurrent threads cannot have the same identifier. |
762 | | * |
763 | | * The thread identifier has no defined semantics other than uniqueness, |
764 | | * and no particular purposes within LibVLC. |
765 | | * It is provided mainly for tracing and debugging. |
766 | | * |
767 | | * On some but not all supported platforms, the thread identifier is in fact |
768 | | * the OS/kernel thread identifier (a.k.a. task PID), and is temporally unique |
769 | | * not only within the process but across the entire system. |
770 | | * |
771 | | * \note |
772 | | * The `main()` thread identifier is typically identical to the process |
773 | | * identifier, but this is not portable. |
774 | | * |
775 | | * \return the thread identifier (cannot fail) |
776 | | */ |
777 | | VLC_API unsigned long vlc_thread_id(void) VLC_USED; |
778 | | |
779 | | /** |
780 | | * Precision monotonic clock. |
781 | | * |
782 | | * In principles, the clock has a precision of 1 MHz. But the actual resolution |
783 | | * may be much lower, especially when it comes to sleeping with vlc_tick_wait() or |
784 | | * vlc_tick_sleep(). Most general-purpose operating systems provide a resolution of |
785 | | * only 100 to 1000 Hz. |
786 | | * |
787 | | * \warning The origin date (time value "zero") is not specified. It is |
788 | | * typically the time the kernel started, but this is platform-dependent. |
789 | | * If you need wall clock time, use gettimeofday() instead. |
790 | | * |
791 | | * \return a timestamp in microseconds. |
792 | | */ |
793 | | VLC_API vlc_tick_t vlc_tick_now(void); |
794 | | |
795 | | /** |
796 | | * Waits until a deadline. |
797 | | * |
798 | | * \param deadline timestamp to wait for (\ref vlc_tick_now()) |
799 | | * |
800 | | * \note The deadline may be exceeded due to OS scheduling. |
801 | | * \note This function is a cancellation point. |
802 | | */ |
803 | | VLC_API void vlc_tick_wait(vlc_tick_t deadline); |
804 | | |
805 | | /** |
806 | | * Waits for an interval of time. |
807 | | * |
808 | | * \param delay how long to wait (in microseconds) |
809 | | * |
810 | | * \note The delay may be exceeded due to OS scheduling. |
811 | | * \note This function is a cancellation point. |
812 | | */ |
813 | | VLC_API void vlc_tick_sleep(vlc_tick_t delay); |
814 | | |
815 | 0 | #define VLC_HARD_MIN_SLEEP VLC_TICK_FROM_MS(10) /* 10 milliseconds = 1 tick at 100Hz */ |
816 | 0 | #define VLC_SOFT_MIN_SLEEP VLC_TICK_FROM_SEC(9) /* 9 seconds */ |
817 | | |
818 | | #if defined(__GNUC__) |
819 | | |
820 | | /* Linux has 100, 250, 300 or 1000Hz |
821 | | * |
822 | | * HZ=100 by default on FreeBSD, but some architectures use a 1000Hz timer |
823 | | */ |
824 | | |
825 | | static |
826 | | VLC_UNUSED_FUNC |
827 | | VLC_ERROR_CALL("sorry, cannot sleep for such short a time") |
828 | | vlc_tick_t impossible_delay( vlc_tick_t delay ) |
829 | 0 | { |
830 | 0 | (void) delay; |
831 | 0 | return VLC_HARD_MIN_SLEEP; |
832 | 0 | } Unexecuted instantiation: demux-run.c:impossible_delay Unexecuted instantiation: common.c:impossible_delay Unexecuted instantiation: var.c:impossible_delay Unexecuted instantiation: decoder.c:impossible_delay Unexecuted instantiation: core.c:impossible_delay Unexecuted instantiation: error.c:impossible_delay Unexecuted instantiation: aiff.c:impossible_delay Unexecuted instantiation: asf.c:impossible_delay Unexecuted instantiation: libasf.c:impossible_delay Unexecuted instantiation: asfpacket.c:impossible_delay Unexecuted instantiation: au.c:impossible_delay Unexecuted instantiation: avi.c:impossible_delay Unexecuted instantiation: libavi.c:impossible_delay Unexecuted instantiation: caf.c:impossible_delay Unexecuted instantiation: cdg.c:impossible_delay Unexecuted instantiation: es.c:impossible_delay Unexecuted instantiation: dts_header.c:impossible_delay Unexecuted instantiation: flac.c:impossible_delay Unexecuted instantiation: xiph_metadata.c:impossible_delay Unexecuted instantiation: h26x.c:impossible_delay Unexecuted instantiation: mjpeg.c:impossible_delay Unexecuted instantiation: mp4.c:impossible_delay Unexecuted instantiation: fragments.c:impossible_delay Unexecuted instantiation: attachments.c:impossible_delay Unexecuted instantiation: heif.c:impossible_delay Unexecuted instantiation: essetup.c:impossible_delay Unexecuted instantiation: meta.c:impossible_delay Unexecuted instantiation: libmp4.c:impossible_delay Unexecuted instantiation: nsv.c:impossible_delay Unexecuted instantiation: ps.c:impossible_delay Unexecuted instantiation: pva.c:impossible_delay Unexecuted instantiation: sap.c:impossible_delay Unexecuted instantiation: smf.c:impossible_delay Unexecuted instantiation: subtitle.c:impossible_delay Unexecuted instantiation: tta.c:impossible_delay Unexecuted instantiation: encttml.c:impossible_delay Unexecuted instantiation: substtml.c:impossible_delay Unexecuted instantiation: ttml.c:impossible_delay Unexecuted instantiation: ty.c:impossible_delay Unexecuted instantiation: voc.c:impossible_delay Unexecuted instantiation: wav.c:impossible_delay Unexecuted instantiation: webvtt.c:impossible_delay Unexecuted instantiation: encvtt.c:impossible_delay Unexecuted instantiation: subsvtt.c:impossible_delay Unexecuted instantiation: xa.c:impossible_delay Unexecuted instantiation: a52.c:impossible_delay Unexecuted instantiation: copy.c:impossible_delay Unexecuted instantiation: dts.c:impossible_delay Unexecuted instantiation: h264.c:impossible_delay Unexecuted instantiation: hxxx_sei.c:impossible_delay Unexecuted instantiation: hxxx_common.c:impossible_delay Unexecuted instantiation: h264_nal.c:impossible_delay Unexecuted instantiation: h264_slice.c:impossible_delay Unexecuted instantiation: hevc.c:impossible_delay Unexecuted instantiation: hevc_nal.c:impossible_delay Unexecuted instantiation: mlp.c:impossible_delay Unexecuted instantiation: mpeg4audio.c:impossible_delay Unexecuted instantiation: mpeg4video.c:impossible_delay Unexecuted instantiation: mpegaudio.c:impossible_delay Unexecuted instantiation: mpegvideo.c:impossible_delay Unexecuted instantiation: vc1.c:impossible_delay Unexecuted instantiation: rawaud.c:impossible_delay Unexecuted instantiation: rawvid.c:impossible_delay Unexecuted instantiation: file.c:impossible_delay Unexecuted instantiation: directory.c:impossible_delay Unexecuted instantiation: libxml.c:impossible_delay Unexecuted instantiation: ogg.c:impossible_delay Unexecuted instantiation: oggseek.c:impossible_delay Unexecuted instantiation: mkv.cpp:impossible_delay(long) Unexecuted instantiation: util.cpp:impossible_delay(long) Unexecuted instantiation: virtual_segment.cpp:impossible_delay(long) Unexecuted instantiation: matroska_segment.cpp:impossible_delay(long) Unexecuted instantiation: matroska_segment_parse.cpp:impossible_delay(long) Unexecuted instantiation: matroska_segment_seeker.cpp:impossible_delay(long) Unexecuted instantiation: demux.cpp:impossible_delay(long) Unexecuted instantiation: events.cpp:impossible_delay(long) Unexecuted instantiation: Ebml_parser.cpp:impossible_delay(long) Unexecuted instantiation: chapters.cpp:impossible_delay(long) Unexecuted instantiation: chapter_command.cpp:impossible_delay(long) Unexecuted instantiation: chapter_command_dvd.cpp:impossible_delay(long) Unexecuted instantiation: chapter_command_script.cpp:impossible_delay(long) Unexecuted instantiation: chapter_command_script_common.cpp:impossible_delay(long) Unexecuted instantiation: stream_io_callback.cpp:impossible_delay(long) Unexecuted instantiation: adpcm.c:impossible_delay Unexecuted instantiation: aes3.c:impossible_delay Unexecuted instantiation: araw.c:impossible_delay Unexecuted instantiation: g711.c:impossible_delay Unexecuted instantiation: lpcm.c:impossible_delay Unexecuted instantiation: uleaddvaudio.c:impossible_delay Unexecuted instantiation: rawvideo.c:impossible_delay Unexecuted instantiation: cc.c:impossible_delay Unexecuted instantiation: cea708.c:impossible_delay Unexecuted instantiation: cvdsub.c:impossible_delay Unexecuted instantiation: dvbsub.c:impossible_delay Unexecuted instantiation: scte18.c:impossible_delay Unexecuted instantiation: scte27.c:impossible_delay Unexecuted instantiation: spudec.c:impossible_delay Unexecuted instantiation: parse.c:impossible_delay Unexecuted instantiation: stl.c:impossible_delay Unexecuted instantiation: subsdec.c:impossible_delay Unexecuted instantiation: subsusf.c:impossible_delay Unexecuted instantiation: svcdsub.c:impossible_delay Unexecuted instantiation: textst.c:impossible_delay Unexecuted instantiation: substx3g.c:impossible_delay Unexecuted instantiation: libvlc.c:impossible_delay Unexecuted instantiation: chain.c:impossible_delay Unexecuted instantiation: help.c:impossible_delay Unexecuted instantiation: cmdline.c:impossible_delay Unexecuted instantiation: media_source.c:impossible_delay Unexecuted instantiation: media_tree.c:impossible_delay Unexecuted instantiation: modules.c:impossible_delay Unexecuted instantiation: bank.c:impossible_delay Unexecuted instantiation: entry.c:impossible_delay Unexecuted instantiation: dialog.c:impossible_delay Unexecuted instantiation: interface.c:impossible_delay Unexecuted instantiation: content.c:impossible_delay Unexecuted instantiation: control.c:impossible_delay Unexecuted instantiation: item.c:impossible_delay Unexecuted instantiation: notify.c:impossible_delay Unexecuted instantiation: player.c:impossible_delay Unexecuted instantiation: playlist.c:impossible_delay Unexecuted instantiation: preparse.c:impossible_delay Unexecuted instantiation: preparser.c:impossible_delay Unexecuted instantiation: access.c:impossible_delay Unexecuted instantiation: decoder_device.c:impossible_delay Unexecuted instantiation: decoder_helpers.c:impossible_delay Unexecuted instantiation: demux.c:impossible_delay Unexecuted instantiation: input.c:impossible_delay Unexecuted instantiation: attachment.c:impossible_delay Unexecuted instantiation: timer.c:impossible_delay Unexecuted instantiation: track.c:impossible_delay Unexecuted instantiation: title.c:impossible_delay Unexecuted instantiation: aout.c:impossible_delay Unexecuted instantiation: vout.c:impossible_delay Unexecuted instantiation: osd.c:impossible_delay Unexecuted instantiation: medialib.c:impossible_delay Unexecuted instantiation: resource.c:impossible_delay Unexecuted instantiation: services_discovery.c:impossible_delay Unexecuted instantiation: stats.c:impossible_delay Unexecuted instantiation: stream.c:impossible_delay Unexecuted instantiation: stream_extractor.c:impossible_delay Unexecuted instantiation: stream_filter.c:impossible_delay Unexecuted instantiation: stream_memory.c:impossible_delay Unexecuted instantiation: subtitles.c:impossible_delay Unexecuted instantiation: dec.c:impossible_delay Unexecuted instantiation: filters.c:impossible_delay Unexecuted instantiation: meter.c:impossible_delay Unexecuted instantiation: output.c:impossible_delay Unexecuted instantiation: volume.c:impossible_delay Unexecuted instantiation: video_output.c:impossible_delay Unexecuted instantiation: video_text.c:impossible_delay Unexecuted instantiation: video_widgets.c:impossible_delay Unexecuted instantiation: vout_subpictures.c:impossible_delay Unexecuted instantiation: video_window.c:impossible_delay Unexecuted instantiation: window.c:impossible_delay Unexecuted instantiation: vout_intf.c:impossible_delay Unexecuted instantiation: charset.c:impossible_delay Unexecuted instantiation: strings.c:impossible_delay Unexecuted instantiation: unicode.c:impossible_delay Unexecuted instantiation: actions.c:impossible_delay Unexecuted instantiation: executor.c:impossible_delay Unexecuted instantiation: probe.c:impossible_delay Unexecuted instantiation: frame.c:impossible_delay Unexecuted instantiation: fifo.c:impossible_delay Unexecuted instantiation: picture.c:impossible_delay Unexecuted instantiation: picture_fifo.c:impossible_delay Unexecuted instantiation: picture_pool.c:impossible_delay Unexecuted instantiation: interrupt.c:impossible_delay Unexecuted instantiation: keystore.c:impossible_delay Unexecuted instantiation: rcu.c:impossible_delay Unexecuted instantiation: renderer_discovery.c:impossible_delay Unexecuted instantiation: threads.c:impossible_delay Unexecuted instantiation: cpu.c:impossible_delay Unexecuted instantiation: exit.c:impossible_delay Unexecuted instantiation: image.c:impossible_delay Unexecuted instantiation: messages.c:impossible_delay Unexecuted instantiation: tracer.c:impossible_delay Unexecuted instantiation: objects.c:impossible_delay Unexecuted instantiation: objres.c:impossible_delay Unexecuted instantiation: queue.c:impossible_delay Unexecuted instantiation: variables.c:impossible_delay Unexecuted instantiation: xml.c:impossible_delay Unexecuted instantiation: filter.c:impossible_delay Unexecuted instantiation: filter_chain.c:impossible_delay Unexecuted instantiation: httpcookies.c:impossible_delay Unexecuted instantiation: subpicture.c:impossible_delay Unexecuted instantiation: medialibrary.c:impossible_delay Unexecuted instantiation: thread.c:impossible_delay Unexecuted instantiation: rand.c:impossible_delay Unexecuted instantiation: specific.c:impossible_delay Unexecuted instantiation: stream_output.c:impossible_delay Unexecuted instantiation: vlm.c:impossible_delay Unexecuted instantiation: vlm_event.c:impossible_delay Unexecuted instantiation: vlmshell.c:impossible_delay Unexecuted instantiation: libvlc-module.c:impossible_delay Unexecuted instantiation: art.c:impossible_delay Unexecuted instantiation: fetcher.c:impossible_delay Unexecuted instantiation: clock.c:impossible_delay Unexecuted instantiation: es_out.c:impossible_delay Unexecuted instantiation: es_out_source.c:impossible_delay Unexecuted instantiation: es_out_timeshift.c:impossible_delay Unexecuted instantiation: display.c:impossible_delay Unexecuted instantiation: inhibit.c:impossible_delay Unexecuted instantiation: interlacing.c:impossible_delay Unexecuted instantiation: snapshot.c:impossible_delay Unexecuted instantiation: io.c:impossible_delay Unexecuted instantiation: chroma_probe.c:impossible_delay Unexecuted instantiation: dirs.c:impossible_delay Unexecuted instantiation: getaddrinfo.c:impossible_delay Unexecuted instantiation: input_clock.c:impossible_delay |
833 | | |
834 | | static |
835 | | VLC_UNUSED_FUNC |
836 | | VLC_WARN_CALL("use proper event handling instead of short delay") |
837 | | vlc_tick_t harmful_delay( vlc_tick_t delay ) |
838 | 0 | { |
839 | 0 | return delay; |
840 | 0 | } Unexecuted instantiation: demux-run.c:harmful_delay Unexecuted instantiation: common.c:harmful_delay Unexecuted instantiation: var.c:harmful_delay Unexecuted instantiation: decoder.c:harmful_delay Unexecuted instantiation: core.c:harmful_delay Unexecuted instantiation: error.c:harmful_delay Unexecuted instantiation: aiff.c:harmful_delay Unexecuted instantiation: asf.c:harmful_delay Unexecuted instantiation: libasf.c:harmful_delay Unexecuted instantiation: asfpacket.c:harmful_delay Unexecuted instantiation: au.c:harmful_delay Unexecuted instantiation: avi.c:harmful_delay Unexecuted instantiation: libavi.c:harmful_delay Unexecuted instantiation: caf.c:harmful_delay Unexecuted instantiation: cdg.c:harmful_delay Unexecuted instantiation: es.c:harmful_delay Unexecuted instantiation: dts_header.c:harmful_delay Unexecuted instantiation: flac.c:harmful_delay Unexecuted instantiation: xiph_metadata.c:harmful_delay Unexecuted instantiation: h26x.c:harmful_delay Unexecuted instantiation: mjpeg.c:harmful_delay Unexecuted instantiation: mp4.c:harmful_delay Unexecuted instantiation: fragments.c:harmful_delay Unexecuted instantiation: attachments.c:harmful_delay Unexecuted instantiation: heif.c:harmful_delay Unexecuted instantiation: essetup.c:harmful_delay Unexecuted instantiation: meta.c:harmful_delay Unexecuted instantiation: libmp4.c:harmful_delay Unexecuted instantiation: nsv.c:harmful_delay Unexecuted instantiation: ps.c:harmful_delay Unexecuted instantiation: pva.c:harmful_delay Unexecuted instantiation: sap.c:harmful_delay Unexecuted instantiation: smf.c:harmful_delay Unexecuted instantiation: subtitle.c:harmful_delay Unexecuted instantiation: tta.c:harmful_delay Unexecuted instantiation: encttml.c:harmful_delay Unexecuted instantiation: substtml.c:harmful_delay Unexecuted instantiation: ttml.c:harmful_delay Unexecuted instantiation: ty.c:harmful_delay Unexecuted instantiation: voc.c:harmful_delay Unexecuted instantiation: wav.c:harmful_delay Unexecuted instantiation: webvtt.c:harmful_delay Unexecuted instantiation: encvtt.c:harmful_delay Unexecuted instantiation: subsvtt.c:harmful_delay Unexecuted instantiation: xa.c:harmful_delay Unexecuted instantiation: a52.c:harmful_delay Unexecuted instantiation: copy.c:harmful_delay Unexecuted instantiation: dts.c:harmful_delay Unexecuted instantiation: h264.c:harmful_delay Unexecuted instantiation: hxxx_sei.c:harmful_delay Unexecuted instantiation: hxxx_common.c:harmful_delay Unexecuted instantiation: h264_nal.c:harmful_delay Unexecuted instantiation: h264_slice.c:harmful_delay Unexecuted instantiation: hevc.c:harmful_delay Unexecuted instantiation: hevc_nal.c:harmful_delay Unexecuted instantiation: mlp.c:harmful_delay Unexecuted instantiation: mpeg4audio.c:harmful_delay Unexecuted instantiation: mpeg4video.c:harmful_delay Unexecuted instantiation: mpegaudio.c:harmful_delay Unexecuted instantiation: mpegvideo.c:harmful_delay Unexecuted instantiation: vc1.c:harmful_delay Unexecuted instantiation: rawaud.c:harmful_delay Unexecuted instantiation: rawvid.c:harmful_delay Unexecuted instantiation: file.c:harmful_delay Unexecuted instantiation: directory.c:harmful_delay Unexecuted instantiation: libxml.c:harmful_delay Unexecuted instantiation: ogg.c:harmful_delay Unexecuted instantiation: oggseek.c:harmful_delay Unexecuted instantiation: mkv.cpp:harmful_delay(long) Unexecuted instantiation: util.cpp:harmful_delay(long) Unexecuted instantiation: virtual_segment.cpp:harmful_delay(long) Unexecuted instantiation: matroska_segment.cpp:harmful_delay(long) Unexecuted instantiation: matroska_segment_parse.cpp:harmful_delay(long) Unexecuted instantiation: matroska_segment_seeker.cpp:harmful_delay(long) Unexecuted instantiation: demux.cpp:harmful_delay(long) Unexecuted instantiation: events.cpp:harmful_delay(long) Unexecuted instantiation: Ebml_parser.cpp:harmful_delay(long) Unexecuted instantiation: chapters.cpp:harmful_delay(long) Unexecuted instantiation: chapter_command.cpp:harmful_delay(long) Unexecuted instantiation: chapter_command_dvd.cpp:harmful_delay(long) Unexecuted instantiation: chapter_command_script.cpp:harmful_delay(long) Unexecuted instantiation: chapter_command_script_common.cpp:harmful_delay(long) Unexecuted instantiation: stream_io_callback.cpp:harmful_delay(long) Unexecuted instantiation: adpcm.c:harmful_delay Unexecuted instantiation: aes3.c:harmful_delay Unexecuted instantiation: araw.c:harmful_delay Unexecuted instantiation: g711.c:harmful_delay Unexecuted instantiation: lpcm.c:harmful_delay Unexecuted instantiation: uleaddvaudio.c:harmful_delay Unexecuted instantiation: rawvideo.c:harmful_delay Unexecuted instantiation: cc.c:harmful_delay Unexecuted instantiation: cea708.c:harmful_delay Unexecuted instantiation: cvdsub.c:harmful_delay Unexecuted instantiation: dvbsub.c:harmful_delay Unexecuted instantiation: scte18.c:harmful_delay Unexecuted instantiation: scte27.c:harmful_delay Unexecuted instantiation: spudec.c:harmful_delay Unexecuted instantiation: parse.c:harmful_delay Unexecuted instantiation: stl.c:harmful_delay Unexecuted instantiation: subsdec.c:harmful_delay Unexecuted instantiation: subsusf.c:harmful_delay Unexecuted instantiation: svcdsub.c:harmful_delay Unexecuted instantiation: textst.c:harmful_delay Unexecuted instantiation: substx3g.c:harmful_delay Unexecuted instantiation: libvlc.c:harmful_delay Unexecuted instantiation: chain.c:harmful_delay Unexecuted instantiation: help.c:harmful_delay Unexecuted instantiation: cmdline.c:harmful_delay Unexecuted instantiation: media_source.c:harmful_delay Unexecuted instantiation: media_tree.c:harmful_delay Unexecuted instantiation: modules.c:harmful_delay Unexecuted instantiation: bank.c:harmful_delay Unexecuted instantiation: entry.c:harmful_delay Unexecuted instantiation: dialog.c:harmful_delay Unexecuted instantiation: interface.c:harmful_delay Unexecuted instantiation: content.c:harmful_delay Unexecuted instantiation: control.c:harmful_delay Unexecuted instantiation: item.c:harmful_delay Unexecuted instantiation: notify.c:harmful_delay Unexecuted instantiation: player.c:harmful_delay Unexecuted instantiation: playlist.c:harmful_delay Unexecuted instantiation: preparse.c:harmful_delay Unexecuted instantiation: preparser.c:harmful_delay Unexecuted instantiation: access.c:harmful_delay Unexecuted instantiation: decoder_device.c:harmful_delay Unexecuted instantiation: decoder_helpers.c:harmful_delay Unexecuted instantiation: demux.c:harmful_delay Unexecuted instantiation: input.c:harmful_delay Unexecuted instantiation: attachment.c:harmful_delay Unexecuted instantiation: timer.c:harmful_delay Unexecuted instantiation: track.c:harmful_delay Unexecuted instantiation: title.c:harmful_delay Unexecuted instantiation: aout.c:harmful_delay Unexecuted instantiation: vout.c:harmful_delay Unexecuted instantiation: osd.c:harmful_delay Unexecuted instantiation: medialib.c:harmful_delay Unexecuted instantiation: resource.c:harmful_delay Unexecuted instantiation: services_discovery.c:harmful_delay Unexecuted instantiation: stats.c:harmful_delay Unexecuted instantiation: stream.c:harmful_delay Unexecuted instantiation: stream_extractor.c:harmful_delay Unexecuted instantiation: stream_filter.c:harmful_delay Unexecuted instantiation: stream_memory.c:harmful_delay Unexecuted instantiation: subtitles.c:harmful_delay Unexecuted instantiation: dec.c:harmful_delay Unexecuted instantiation: filters.c:harmful_delay Unexecuted instantiation: meter.c:harmful_delay Unexecuted instantiation: output.c:harmful_delay Unexecuted instantiation: volume.c:harmful_delay Unexecuted instantiation: video_output.c:harmful_delay Unexecuted instantiation: video_text.c:harmful_delay Unexecuted instantiation: video_widgets.c:harmful_delay Unexecuted instantiation: vout_subpictures.c:harmful_delay Unexecuted instantiation: video_window.c:harmful_delay Unexecuted instantiation: window.c:harmful_delay Unexecuted instantiation: vout_intf.c:harmful_delay Unexecuted instantiation: charset.c:harmful_delay Unexecuted instantiation: strings.c:harmful_delay Unexecuted instantiation: unicode.c:harmful_delay Unexecuted instantiation: actions.c:harmful_delay Unexecuted instantiation: executor.c:harmful_delay Unexecuted instantiation: probe.c:harmful_delay Unexecuted instantiation: frame.c:harmful_delay Unexecuted instantiation: fifo.c:harmful_delay Unexecuted instantiation: picture.c:harmful_delay Unexecuted instantiation: picture_fifo.c:harmful_delay Unexecuted instantiation: picture_pool.c:harmful_delay Unexecuted instantiation: interrupt.c:harmful_delay Unexecuted instantiation: keystore.c:harmful_delay Unexecuted instantiation: rcu.c:harmful_delay Unexecuted instantiation: renderer_discovery.c:harmful_delay Unexecuted instantiation: threads.c:harmful_delay Unexecuted instantiation: cpu.c:harmful_delay Unexecuted instantiation: exit.c:harmful_delay Unexecuted instantiation: image.c:harmful_delay Unexecuted instantiation: messages.c:harmful_delay Unexecuted instantiation: tracer.c:harmful_delay Unexecuted instantiation: objects.c:harmful_delay Unexecuted instantiation: objres.c:harmful_delay Unexecuted instantiation: queue.c:harmful_delay Unexecuted instantiation: variables.c:harmful_delay Unexecuted instantiation: xml.c:harmful_delay Unexecuted instantiation: filter.c:harmful_delay Unexecuted instantiation: filter_chain.c:harmful_delay Unexecuted instantiation: httpcookies.c:harmful_delay Unexecuted instantiation: subpicture.c:harmful_delay Unexecuted instantiation: medialibrary.c:harmful_delay Unexecuted instantiation: thread.c:harmful_delay Unexecuted instantiation: rand.c:harmful_delay Unexecuted instantiation: specific.c:harmful_delay Unexecuted instantiation: stream_output.c:harmful_delay Unexecuted instantiation: vlm.c:harmful_delay Unexecuted instantiation: vlm_event.c:harmful_delay Unexecuted instantiation: vlmshell.c:harmful_delay Unexecuted instantiation: libvlc-module.c:harmful_delay Unexecuted instantiation: art.c:harmful_delay Unexecuted instantiation: fetcher.c:harmful_delay Unexecuted instantiation: clock.c:harmful_delay Unexecuted instantiation: es_out.c:harmful_delay Unexecuted instantiation: es_out_source.c:harmful_delay Unexecuted instantiation: es_out_timeshift.c:harmful_delay Unexecuted instantiation: display.c:harmful_delay Unexecuted instantiation: inhibit.c:harmful_delay Unexecuted instantiation: interlacing.c:harmful_delay Unexecuted instantiation: snapshot.c:harmful_delay Unexecuted instantiation: io.c:harmful_delay Unexecuted instantiation: chroma_probe.c:harmful_delay Unexecuted instantiation: dirs.c:harmful_delay Unexecuted instantiation: getaddrinfo.c:harmful_delay Unexecuted instantiation: input_clock.c:harmful_delay |
841 | | |
842 | | # define check_delay( d ) \ |
843 | 0 | ((__builtin_constant_p(d < VLC_HARD_MIN_SLEEP) \ |
844 | 0 | && (d < VLC_HARD_MIN_SLEEP)) \ |
845 | 0 | ? impossible_delay(d) \ |
846 | 0 | : ((__builtin_constant_p(d < VLC_SOFT_MIN_SLEEP) \ |
847 | 0 | && (d < VLC_SOFT_MIN_SLEEP)) \ |
848 | 0 | ? harmful_delay(d) \ |
849 | 0 | : d)) |
850 | | |
851 | | static |
852 | | VLC_UNUSED_FUNC |
853 | | VLC_ERROR_CALL("deadlines can not be constant") |
854 | | vlc_tick_t impossible_deadline( vlc_tick_t deadline ) |
855 | 0 | { |
856 | 0 | return deadline; |
857 | 0 | } Unexecuted instantiation: demux-run.c:impossible_deadline Unexecuted instantiation: common.c:impossible_deadline Unexecuted instantiation: var.c:impossible_deadline Unexecuted instantiation: decoder.c:impossible_deadline Unexecuted instantiation: core.c:impossible_deadline Unexecuted instantiation: error.c:impossible_deadline Unexecuted instantiation: aiff.c:impossible_deadline Unexecuted instantiation: asf.c:impossible_deadline Unexecuted instantiation: libasf.c:impossible_deadline Unexecuted instantiation: asfpacket.c:impossible_deadline Unexecuted instantiation: au.c:impossible_deadline Unexecuted instantiation: avi.c:impossible_deadline Unexecuted instantiation: libavi.c:impossible_deadline Unexecuted instantiation: caf.c:impossible_deadline Unexecuted instantiation: cdg.c:impossible_deadline Unexecuted instantiation: es.c:impossible_deadline Unexecuted instantiation: dts_header.c:impossible_deadline Unexecuted instantiation: flac.c:impossible_deadline Unexecuted instantiation: xiph_metadata.c:impossible_deadline Unexecuted instantiation: h26x.c:impossible_deadline Unexecuted instantiation: mjpeg.c:impossible_deadline Unexecuted instantiation: mp4.c:impossible_deadline Unexecuted instantiation: fragments.c:impossible_deadline Unexecuted instantiation: attachments.c:impossible_deadline Unexecuted instantiation: heif.c:impossible_deadline Unexecuted instantiation: essetup.c:impossible_deadline Unexecuted instantiation: meta.c:impossible_deadline Unexecuted instantiation: libmp4.c:impossible_deadline Unexecuted instantiation: nsv.c:impossible_deadline Unexecuted instantiation: ps.c:impossible_deadline Unexecuted instantiation: pva.c:impossible_deadline Unexecuted instantiation: sap.c:impossible_deadline Unexecuted instantiation: smf.c:impossible_deadline Unexecuted instantiation: subtitle.c:impossible_deadline Unexecuted instantiation: tta.c:impossible_deadline Unexecuted instantiation: encttml.c:impossible_deadline Unexecuted instantiation: substtml.c:impossible_deadline Unexecuted instantiation: ttml.c:impossible_deadline Unexecuted instantiation: ty.c:impossible_deadline Unexecuted instantiation: voc.c:impossible_deadline Unexecuted instantiation: wav.c:impossible_deadline Unexecuted instantiation: webvtt.c:impossible_deadline Unexecuted instantiation: encvtt.c:impossible_deadline Unexecuted instantiation: subsvtt.c:impossible_deadline Unexecuted instantiation: xa.c:impossible_deadline Unexecuted instantiation: a52.c:impossible_deadline Unexecuted instantiation: copy.c:impossible_deadline Unexecuted instantiation: dts.c:impossible_deadline Unexecuted instantiation: h264.c:impossible_deadline Unexecuted instantiation: hxxx_sei.c:impossible_deadline Unexecuted instantiation: hxxx_common.c:impossible_deadline Unexecuted instantiation: h264_nal.c:impossible_deadline Unexecuted instantiation: h264_slice.c:impossible_deadline Unexecuted instantiation: hevc.c:impossible_deadline Unexecuted instantiation: hevc_nal.c:impossible_deadline Unexecuted instantiation: mlp.c:impossible_deadline Unexecuted instantiation: mpeg4audio.c:impossible_deadline Unexecuted instantiation: mpeg4video.c:impossible_deadline Unexecuted instantiation: mpegaudio.c:impossible_deadline Unexecuted instantiation: mpegvideo.c:impossible_deadline Unexecuted instantiation: vc1.c:impossible_deadline Unexecuted instantiation: rawaud.c:impossible_deadline Unexecuted instantiation: rawvid.c:impossible_deadline Unexecuted instantiation: file.c:impossible_deadline Unexecuted instantiation: directory.c:impossible_deadline Unexecuted instantiation: libxml.c:impossible_deadline Unexecuted instantiation: ogg.c:impossible_deadline Unexecuted instantiation: oggseek.c:impossible_deadline Unexecuted instantiation: mkv.cpp:impossible_deadline(long) Unexecuted instantiation: util.cpp:impossible_deadline(long) Unexecuted instantiation: virtual_segment.cpp:impossible_deadline(long) Unexecuted instantiation: matroska_segment.cpp:impossible_deadline(long) Unexecuted instantiation: matroska_segment_parse.cpp:impossible_deadline(long) Unexecuted instantiation: matroska_segment_seeker.cpp:impossible_deadline(long) Unexecuted instantiation: demux.cpp:impossible_deadline(long) Unexecuted instantiation: events.cpp:impossible_deadline(long) Unexecuted instantiation: Ebml_parser.cpp:impossible_deadline(long) Unexecuted instantiation: chapters.cpp:impossible_deadline(long) Unexecuted instantiation: chapter_command.cpp:impossible_deadline(long) Unexecuted instantiation: chapter_command_dvd.cpp:impossible_deadline(long) Unexecuted instantiation: chapter_command_script.cpp:impossible_deadline(long) Unexecuted instantiation: chapter_command_script_common.cpp:impossible_deadline(long) Unexecuted instantiation: stream_io_callback.cpp:impossible_deadline(long) Unexecuted instantiation: adpcm.c:impossible_deadline Unexecuted instantiation: aes3.c:impossible_deadline Unexecuted instantiation: araw.c:impossible_deadline Unexecuted instantiation: g711.c:impossible_deadline Unexecuted instantiation: lpcm.c:impossible_deadline Unexecuted instantiation: uleaddvaudio.c:impossible_deadline Unexecuted instantiation: rawvideo.c:impossible_deadline Unexecuted instantiation: cc.c:impossible_deadline Unexecuted instantiation: cea708.c:impossible_deadline Unexecuted instantiation: cvdsub.c:impossible_deadline Unexecuted instantiation: dvbsub.c:impossible_deadline Unexecuted instantiation: scte18.c:impossible_deadline Unexecuted instantiation: scte27.c:impossible_deadline Unexecuted instantiation: spudec.c:impossible_deadline Unexecuted instantiation: parse.c:impossible_deadline Unexecuted instantiation: stl.c:impossible_deadline Unexecuted instantiation: subsdec.c:impossible_deadline Unexecuted instantiation: subsusf.c:impossible_deadline Unexecuted instantiation: svcdsub.c:impossible_deadline Unexecuted instantiation: textst.c:impossible_deadline Unexecuted instantiation: substx3g.c:impossible_deadline Unexecuted instantiation: libvlc.c:impossible_deadline Unexecuted instantiation: chain.c:impossible_deadline Unexecuted instantiation: help.c:impossible_deadline Unexecuted instantiation: cmdline.c:impossible_deadline Unexecuted instantiation: media_source.c:impossible_deadline Unexecuted instantiation: media_tree.c:impossible_deadline Unexecuted instantiation: modules.c:impossible_deadline Unexecuted instantiation: bank.c:impossible_deadline Unexecuted instantiation: entry.c:impossible_deadline Unexecuted instantiation: dialog.c:impossible_deadline Unexecuted instantiation: interface.c:impossible_deadline Unexecuted instantiation: content.c:impossible_deadline Unexecuted instantiation: control.c:impossible_deadline Unexecuted instantiation: item.c:impossible_deadline Unexecuted instantiation: notify.c:impossible_deadline Unexecuted instantiation: player.c:impossible_deadline Unexecuted instantiation: playlist.c:impossible_deadline Unexecuted instantiation: preparse.c:impossible_deadline Unexecuted instantiation: preparser.c:impossible_deadline Unexecuted instantiation: access.c:impossible_deadline Unexecuted instantiation: decoder_device.c:impossible_deadline Unexecuted instantiation: decoder_helpers.c:impossible_deadline Unexecuted instantiation: demux.c:impossible_deadline Unexecuted instantiation: input.c:impossible_deadline Unexecuted instantiation: attachment.c:impossible_deadline Unexecuted instantiation: timer.c:impossible_deadline Unexecuted instantiation: track.c:impossible_deadline Unexecuted instantiation: title.c:impossible_deadline Unexecuted instantiation: aout.c:impossible_deadline Unexecuted instantiation: vout.c:impossible_deadline Unexecuted instantiation: osd.c:impossible_deadline Unexecuted instantiation: medialib.c:impossible_deadline Unexecuted instantiation: resource.c:impossible_deadline Unexecuted instantiation: services_discovery.c:impossible_deadline Unexecuted instantiation: stats.c:impossible_deadline Unexecuted instantiation: stream.c:impossible_deadline Unexecuted instantiation: stream_extractor.c:impossible_deadline Unexecuted instantiation: stream_filter.c:impossible_deadline Unexecuted instantiation: stream_memory.c:impossible_deadline Unexecuted instantiation: subtitles.c:impossible_deadline Unexecuted instantiation: dec.c:impossible_deadline Unexecuted instantiation: filters.c:impossible_deadline Unexecuted instantiation: meter.c:impossible_deadline Unexecuted instantiation: output.c:impossible_deadline Unexecuted instantiation: volume.c:impossible_deadline Unexecuted instantiation: video_output.c:impossible_deadline Unexecuted instantiation: video_text.c:impossible_deadline Unexecuted instantiation: video_widgets.c:impossible_deadline Unexecuted instantiation: vout_subpictures.c:impossible_deadline Unexecuted instantiation: video_window.c:impossible_deadline Unexecuted instantiation: window.c:impossible_deadline Unexecuted instantiation: vout_intf.c:impossible_deadline Unexecuted instantiation: charset.c:impossible_deadline Unexecuted instantiation: strings.c:impossible_deadline Unexecuted instantiation: unicode.c:impossible_deadline Unexecuted instantiation: actions.c:impossible_deadline Unexecuted instantiation: executor.c:impossible_deadline Unexecuted instantiation: probe.c:impossible_deadline Unexecuted instantiation: frame.c:impossible_deadline Unexecuted instantiation: fifo.c:impossible_deadline Unexecuted instantiation: picture.c:impossible_deadline Unexecuted instantiation: picture_fifo.c:impossible_deadline Unexecuted instantiation: picture_pool.c:impossible_deadline Unexecuted instantiation: interrupt.c:impossible_deadline Unexecuted instantiation: keystore.c:impossible_deadline Unexecuted instantiation: rcu.c:impossible_deadline Unexecuted instantiation: renderer_discovery.c:impossible_deadline Unexecuted instantiation: threads.c:impossible_deadline Unexecuted instantiation: cpu.c:impossible_deadline Unexecuted instantiation: exit.c:impossible_deadline Unexecuted instantiation: image.c:impossible_deadline Unexecuted instantiation: messages.c:impossible_deadline Unexecuted instantiation: tracer.c:impossible_deadline Unexecuted instantiation: objects.c:impossible_deadline Unexecuted instantiation: objres.c:impossible_deadline Unexecuted instantiation: queue.c:impossible_deadline Unexecuted instantiation: variables.c:impossible_deadline Unexecuted instantiation: xml.c:impossible_deadline Unexecuted instantiation: filter.c:impossible_deadline Unexecuted instantiation: filter_chain.c:impossible_deadline Unexecuted instantiation: httpcookies.c:impossible_deadline Unexecuted instantiation: subpicture.c:impossible_deadline Unexecuted instantiation: medialibrary.c:impossible_deadline Unexecuted instantiation: thread.c:impossible_deadline Unexecuted instantiation: rand.c:impossible_deadline Unexecuted instantiation: specific.c:impossible_deadline Unexecuted instantiation: stream_output.c:impossible_deadline Unexecuted instantiation: vlm.c:impossible_deadline Unexecuted instantiation: vlm_event.c:impossible_deadline Unexecuted instantiation: vlmshell.c:impossible_deadline Unexecuted instantiation: libvlc-module.c:impossible_deadline Unexecuted instantiation: art.c:impossible_deadline Unexecuted instantiation: fetcher.c:impossible_deadline Unexecuted instantiation: clock.c:impossible_deadline Unexecuted instantiation: es_out.c:impossible_deadline Unexecuted instantiation: es_out_source.c:impossible_deadline Unexecuted instantiation: es_out_timeshift.c:impossible_deadline Unexecuted instantiation: display.c:impossible_deadline Unexecuted instantiation: inhibit.c:impossible_deadline Unexecuted instantiation: interlacing.c:impossible_deadline Unexecuted instantiation: snapshot.c:impossible_deadline Unexecuted instantiation: io.c:impossible_deadline Unexecuted instantiation: chroma_probe.c:impossible_deadline Unexecuted instantiation: dirs.c:impossible_deadline Unexecuted instantiation: getaddrinfo.c:impossible_deadline Unexecuted instantiation: input_clock.c:impossible_deadline |
858 | | |
859 | | # define check_deadline( d ) \ |
860 | 0 | (__builtin_constant_p(d) ? impossible_deadline(d) : d) |
861 | | #endif |
862 | | |
863 | | #if defined(check_delay) |
864 | 0 | #define vlc_tick_sleep(d) vlc_tick_sleep(check_delay(d)) |
865 | | #endif |
866 | | #if defined(check_deadline) |
867 | 0 | #define vlc_tick_wait(d) vlc_tick_wait(check_deadline(d)) |
868 | | #endif |
869 | | |
870 | | /** |
871 | | * \defgroup timer Asynchronous/threaded timers |
872 | | * @{ |
873 | | */ |
874 | | /** |
875 | | * Initializes an asynchronous timer. |
876 | | * |
877 | | * \param id pointer to timer to be initialized |
878 | | * \param func function that the timer will call |
879 | | * \param data parameter for the timer function |
880 | | * \return 0 on success, a system error code otherwise. |
881 | | * |
882 | | * \warning Asynchronous timers are processed from an unspecified thread. |
883 | | * \note Multiple occurrences of a single interval timer are serialized: |
884 | | * they cannot run concurrently. |
885 | | */ |
886 | | VLC_API int vlc_timer_create(vlc_timer_t *id, void (*func)(void *), void *data) |
887 | | VLC_USED; |
888 | | |
889 | | /** |
890 | | * Destroys an initialized timer. |
891 | | * |
892 | | * If needed, the timer is first disarmed. Behaviour is undefined if the |
893 | | * specified timer is not initialized. |
894 | | * |
895 | | * \warning This function <b>must</b> be called before the timer data can be |
896 | | * freed and before the timer callback function can be unmapped/unloaded. |
897 | | * |
898 | | * \param timer timer to destroy |
899 | | */ |
900 | | VLC_API void vlc_timer_destroy(vlc_timer_t timer); |
901 | | |
902 | | #define VLC_TIMER_DISARM (0) |
903 | | #define VLC_TIMER_FIRE_ONCE (0) |
904 | | |
905 | | /** |
906 | | * Arms or disarms an initialized timer. |
907 | | * |
908 | | * This functions overrides any previous call to itself. |
909 | | * |
910 | | * \note A timer can fire later than requested due to system scheduling |
911 | | * limitations. An interval timer can fail to trigger sometimes, either because |
912 | | * the system is busy or suspended, or because a previous iteration of the |
913 | | * timer is still running. See also vlc_timer_getoverrun(). |
914 | | * |
915 | | * \param timer initialized timer |
916 | | * \param absolute the timer value origin is the same as vlc_tick_now() if true, |
917 | | * the timer value is relative to now if false. |
918 | | * \param value zero to disarm the timer, otherwise the initial time to wait |
919 | | * before firing the timer. |
920 | | * \param interval zero to fire the timer just once, otherwise the timer |
921 | | * repetition interval. |
922 | | */ |
923 | | VLC_API void vlc_timer_schedule(vlc_timer_t timer, bool absolute, |
924 | | vlc_tick_t value, vlc_tick_t interval); |
925 | | |
926 | | static inline void vlc_timer_disarm(vlc_timer_t timer) |
927 | 0 | { |
928 | 0 | vlc_timer_schedule( timer, false, VLC_TIMER_DISARM, 0 ); |
929 | 0 | } Unexecuted instantiation: demux-run.c:vlc_timer_disarm Unexecuted instantiation: common.c:vlc_timer_disarm Unexecuted instantiation: var.c:vlc_timer_disarm Unexecuted instantiation: decoder.c:vlc_timer_disarm Unexecuted instantiation: core.c:vlc_timer_disarm Unexecuted instantiation: error.c:vlc_timer_disarm Unexecuted instantiation: aiff.c:vlc_timer_disarm Unexecuted instantiation: asf.c:vlc_timer_disarm Unexecuted instantiation: libasf.c:vlc_timer_disarm Unexecuted instantiation: asfpacket.c:vlc_timer_disarm Unexecuted instantiation: au.c:vlc_timer_disarm Unexecuted instantiation: avi.c:vlc_timer_disarm Unexecuted instantiation: libavi.c:vlc_timer_disarm Unexecuted instantiation: caf.c:vlc_timer_disarm Unexecuted instantiation: cdg.c:vlc_timer_disarm Unexecuted instantiation: es.c:vlc_timer_disarm Unexecuted instantiation: dts_header.c:vlc_timer_disarm Unexecuted instantiation: flac.c:vlc_timer_disarm Unexecuted instantiation: xiph_metadata.c:vlc_timer_disarm Unexecuted instantiation: h26x.c:vlc_timer_disarm Unexecuted instantiation: mjpeg.c:vlc_timer_disarm Unexecuted instantiation: mp4.c:vlc_timer_disarm Unexecuted instantiation: fragments.c:vlc_timer_disarm Unexecuted instantiation: attachments.c:vlc_timer_disarm Unexecuted instantiation: heif.c:vlc_timer_disarm Unexecuted instantiation: essetup.c:vlc_timer_disarm Unexecuted instantiation: meta.c:vlc_timer_disarm Unexecuted instantiation: libmp4.c:vlc_timer_disarm Unexecuted instantiation: nsv.c:vlc_timer_disarm Unexecuted instantiation: ps.c:vlc_timer_disarm Unexecuted instantiation: pva.c:vlc_timer_disarm Unexecuted instantiation: sap.c:vlc_timer_disarm Unexecuted instantiation: smf.c:vlc_timer_disarm Unexecuted instantiation: subtitle.c:vlc_timer_disarm Unexecuted instantiation: tta.c:vlc_timer_disarm Unexecuted instantiation: encttml.c:vlc_timer_disarm Unexecuted instantiation: substtml.c:vlc_timer_disarm Unexecuted instantiation: ttml.c:vlc_timer_disarm Unexecuted instantiation: ty.c:vlc_timer_disarm Unexecuted instantiation: voc.c:vlc_timer_disarm Unexecuted instantiation: wav.c:vlc_timer_disarm Unexecuted instantiation: webvtt.c:vlc_timer_disarm Unexecuted instantiation: encvtt.c:vlc_timer_disarm Unexecuted instantiation: subsvtt.c:vlc_timer_disarm Unexecuted instantiation: xa.c:vlc_timer_disarm Unexecuted instantiation: a52.c:vlc_timer_disarm Unexecuted instantiation: copy.c:vlc_timer_disarm Unexecuted instantiation: dts.c:vlc_timer_disarm Unexecuted instantiation: h264.c:vlc_timer_disarm Unexecuted instantiation: hxxx_sei.c:vlc_timer_disarm Unexecuted instantiation: hxxx_common.c:vlc_timer_disarm Unexecuted instantiation: h264_nal.c:vlc_timer_disarm Unexecuted instantiation: h264_slice.c:vlc_timer_disarm Unexecuted instantiation: hevc.c:vlc_timer_disarm Unexecuted instantiation: hevc_nal.c:vlc_timer_disarm Unexecuted instantiation: mlp.c:vlc_timer_disarm Unexecuted instantiation: mpeg4audio.c:vlc_timer_disarm Unexecuted instantiation: mpeg4video.c:vlc_timer_disarm Unexecuted instantiation: mpegaudio.c:vlc_timer_disarm Unexecuted instantiation: mpegvideo.c:vlc_timer_disarm Unexecuted instantiation: vc1.c:vlc_timer_disarm Unexecuted instantiation: rawaud.c:vlc_timer_disarm Unexecuted instantiation: rawvid.c:vlc_timer_disarm Unexecuted instantiation: file.c:vlc_timer_disarm Unexecuted instantiation: directory.c:vlc_timer_disarm Unexecuted instantiation: libxml.c:vlc_timer_disarm Unexecuted instantiation: ogg.c:vlc_timer_disarm Unexecuted instantiation: oggseek.c:vlc_timer_disarm Unexecuted instantiation: mkv.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: util.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: virtual_segment.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: matroska_segment.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: matroska_segment_parse.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: matroska_segment_seeker.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: demux.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: events.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: Ebml_parser.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: chapters.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: chapter_command.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: chapter_command_dvd.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: chapter_command_script.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: chapter_command_script_common.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: stream_io_callback.cpp:vlc_timer_disarm(vlc_timer*) Unexecuted instantiation: adpcm.c:vlc_timer_disarm Unexecuted instantiation: aes3.c:vlc_timer_disarm Unexecuted instantiation: araw.c:vlc_timer_disarm Unexecuted instantiation: g711.c:vlc_timer_disarm Unexecuted instantiation: lpcm.c:vlc_timer_disarm Unexecuted instantiation: uleaddvaudio.c:vlc_timer_disarm Unexecuted instantiation: rawvideo.c:vlc_timer_disarm Unexecuted instantiation: cc.c:vlc_timer_disarm Unexecuted instantiation: cea708.c:vlc_timer_disarm Unexecuted instantiation: cvdsub.c:vlc_timer_disarm Unexecuted instantiation: dvbsub.c:vlc_timer_disarm Unexecuted instantiation: scte18.c:vlc_timer_disarm Unexecuted instantiation: scte27.c:vlc_timer_disarm Unexecuted instantiation: spudec.c:vlc_timer_disarm Unexecuted instantiation: parse.c:vlc_timer_disarm Unexecuted instantiation: stl.c:vlc_timer_disarm Unexecuted instantiation: subsdec.c:vlc_timer_disarm Unexecuted instantiation: subsusf.c:vlc_timer_disarm Unexecuted instantiation: svcdsub.c:vlc_timer_disarm Unexecuted instantiation: textst.c:vlc_timer_disarm Unexecuted instantiation: substx3g.c:vlc_timer_disarm Unexecuted instantiation: libvlc.c:vlc_timer_disarm Unexecuted instantiation: chain.c:vlc_timer_disarm Unexecuted instantiation: help.c:vlc_timer_disarm Unexecuted instantiation: cmdline.c:vlc_timer_disarm Unexecuted instantiation: media_source.c:vlc_timer_disarm Unexecuted instantiation: media_tree.c:vlc_timer_disarm Unexecuted instantiation: modules.c:vlc_timer_disarm Unexecuted instantiation: bank.c:vlc_timer_disarm Unexecuted instantiation: entry.c:vlc_timer_disarm Unexecuted instantiation: dialog.c:vlc_timer_disarm Unexecuted instantiation: interface.c:vlc_timer_disarm Unexecuted instantiation: content.c:vlc_timer_disarm Unexecuted instantiation: control.c:vlc_timer_disarm Unexecuted instantiation: item.c:vlc_timer_disarm Unexecuted instantiation: notify.c:vlc_timer_disarm Unexecuted instantiation: player.c:vlc_timer_disarm Unexecuted instantiation: playlist.c:vlc_timer_disarm Unexecuted instantiation: preparse.c:vlc_timer_disarm Unexecuted instantiation: preparser.c:vlc_timer_disarm Unexecuted instantiation: access.c:vlc_timer_disarm Unexecuted instantiation: decoder_device.c:vlc_timer_disarm Unexecuted instantiation: decoder_helpers.c:vlc_timer_disarm Unexecuted instantiation: demux.c:vlc_timer_disarm Unexecuted instantiation: input.c:vlc_timer_disarm Unexecuted instantiation: attachment.c:vlc_timer_disarm Unexecuted instantiation: timer.c:vlc_timer_disarm Unexecuted instantiation: track.c:vlc_timer_disarm Unexecuted instantiation: title.c:vlc_timer_disarm Unexecuted instantiation: aout.c:vlc_timer_disarm Unexecuted instantiation: vout.c:vlc_timer_disarm Unexecuted instantiation: osd.c:vlc_timer_disarm Unexecuted instantiation: medialib.c:vlc_timer_disarm Unexecuted instantiation: resource.c:vlc_timer_disarm Unexecuted instantiation: services_discovery.c:vlc_timer_disarm Unexecuted instantiation: stats.c:vlc_timer_disarm Unexecuted instantiation: stream.c:vlc_timer_disarm Unexecuted instantiation: stream_extractor.c:vlc_timer_disarm Unexecuted instantiation: stream_filter.c:vlc_timer_disarm Unexecuted instantiation: stream_memory.c:vlc_timer_disarm Unexecuted instantiation: subtitles.c:vlc_timer_disarm Unexecuted instantiation: dec.c:vlc_timer_disarm Unexecuted instantiation: filters.c:vlc_timer_disarm Unexecuted instantiation: meter.c:vlc_timer_disarm Unexecuted instantiation: output.c:vlc_timer_disarm Unexecuted instantiation: volume.c:vlc_timer_disarm Unexecuted instantiation: video_output.c:vlc_timer_disarm Unexecuted instantiation: video_text.c:vlc_timer_disarm Unexecuted instantiation: video_widgets.c:vlc_timer_disarm Unexecuted instantiation: vout_subpictures.c:vlc_timer_disarm Unexecuted instantiation: video_window.c:vlc_timer_disarm Unexecuted instantiation: window.c:vlc_timer_disarm Unexecuted instantiation: vout_intf.c:vlc_timer_disarm Unexecuted instantiation: charset.c:vlc_timer_disarm Unexecuted instantiation: strings.c:vlc_timer_disarm Unexecuted instantiation: unicode.c:vlc_timer_disarm Unexecuted instantiation: actions.c:vlc_timer_disarm Unexecuted instantiation: executor.c:vlc_timer_disarm Unexecuted instantiation: probe.c:vlc_timer_disarm Unexecuted instantiation: frame.c:vlc_timer_disarm Unexecuted instantiation: fifo.c:vlc_timer_disarm Unexecuted instantiation: picture.c:vlc_timer_disarm Unexecuted instantiation: picture_fifo.c:vlc_timer_disarm Unexecuted instantiation: picture_pool.c:vlc_timer_disarm Unexecuted instantiation: interrupt.c:vlc_timer_disarm Unexecuted instantiation: keystore.c:vlc_timer_disarm Unexecuted instantiation: rcu.c:vlc_timer_disarm Unexecuted instantiation: renderer_discovery.c:vlc_timer_disarm Unexecuted instantiation: threads.c:vlc_timer_disarm Unexecuted instantiation: cpu.c:vlc_timer_disarm Unexecuted instantiation: exit.c:vlc_timer_disarm Unexecuted instantiation: image.c:vlc_timer_disarm Unexecuted instantiation: messages.c:vlc_timer_disarm Unexecuted instantiation: tracer.c:vlc_timer_disarm Unexecuted instantiation: objects.c:vlc_timer_disarm Unexecuted instantiation: objres.c:vlc_timer_disarm Unexecuted instantiation: queue.c:vlc_timer_disarm Unexecuted instantiation: variables.c:vlc_timer_disarm Unexecuted instantiation: xml.c:vlc_timer_disarm Unexecuted instantiation: filter.c:vlc_timer_disarm Unexecuted instantiation: filter_chain.c:vlc_timer_disarm Unexecuted instantiation: httpcookies.c:vlc_timer_disarm Unexecuted instantiation: subpicture.c:vlc_timer_disarm Unexecuted instantiation: medialibrary.c:vlc_timer_disarm Unexecuted instantiation: thread.c:vlc_timer_disarm Unexecuted instantiation: rand.c:vlc_timer_disarm Unexecuted instantiation: specific.c:vlc_timer_disarm Unexecuted instantiation: stream_output.c:vlc_timer_disarm Unexecuted instantiation: vlm.c:vlc_timer_disarm Unexecuted instantiation: vlm_event.c:vlc_timer_disarm Unexecuted instantiation: vlmshell.c:vlc_timer_disarm Unexecuted instantiation: libvlc-module.c:vlc_timer_disarm Unexecuted instantiation: art.c:vlc_timer_disarm Unexecuted instantiation: fetcher.c:vlc_timer_disarm Unexecuted instantiation: clock.c:vlc_timer_disarm Unexecuted instantiation: es_out.c:vlc_timer_disarm Unexecuted instantiation: es_out_source.c:vlc_timer_disarm Unexecuted instantiation: es_out_timeshift.c:vlc_timer_disarm Unexecuted instantiation: display.c:vlc_timer_disarm Unexecuted instantiation: inhibit.c:vlc_timer_disarm Unexecuted instantiation: interlacing.c:vlc_timer_disarm Unexecuted instantiation: snapshot.c:vlc_timer_disarm Unexecuted instantiation: io.c:vlc_timer_disarm Unexecuted instantiation: chroma_probe.c:vlc_timer_disarm Unexecuted instantiation: dirs.c:vlc_timer_disarm Unexecuted instantiation: getaddrinfo.c:vlc_timer_disarm Unexecuted instantiation: input_clock.c:vlc_timer_disarm |
930 | | |
931 | | static inline void vlc_timer_schedule_asap(vlc_timer_t timer, vlc_tick_t interval) |
932 | 0 | { |
933 | 0 | vlc_timer_schedule(timer, false, 1, interval); |
934 | 0 | } Unexecuted instantiation: demux-run.c:vlc_timer_schedule_asap Unexecuted instantiation: common.c:vlc_timer_schedule_asap Unexecuted instantiation: var.c:vlc_timer_schedule_asap Unexecuted instantiation: decoder.c:vlc_timer_schedule_asap Unexecuted instantiation: core.c:vlc_timer_schedule_asap Unexecuted instantiation: error.c:vlc_timer_schedule_asap Unexecuted instantiation: aiff.c:vlc_timer_schedule_asap Unexecuted instantiation: asf.c:vlc_timer_schedule_asap Unexecuted instantiation: libasf.c:vlc_timer_schedule_asap Unexecuted instantiation: asfpacket.c:vlc_timer_schedule_asap Unexecuted instantiation: au.c:vlc_timer_schedule_asap Unexecuted instantiation: avi.c:vlc_timer_schedule_asap Unexecuted instantiation: libavi.c:vlc_timer_schedule_asap Unexecuted instantiation: caf.c:vlc_timer_schedule_asap Unexecuted instantiation: cdg.c:vlc_timer_schedule_asap Unexecuted instantiation: es.c:vlc_timer_schedule_asap Unexecuted instantiation: dts_header.c:vlc_timer_schedule_asap Unexecuted instantiation: flac.c:vlc_timer_schedule_asap Unexecuted instantiation: xiph_metadata.c:vlc_timer_schedule_asap Unexecuted instantiation: h26x.c:vlc_timer_schedule_asap Unexecuted instantiation: mjpeg.c:vlc_timer_schedule_asap Unexecuted instantiation: mp4.c:vlc_timer_schedule_asap Unexecuted instantiation: fragments.c:vlc_timer_schedule_asap Unexecuted instantiation: attachments.c:vlc_timer_schedule_asap Unexecuted instantiation: heif.c:vlc_timer_schedule_asap Unexecuted instantiation: essetup.c:vlc_timer_schedule_asap Unexecuted instantiation: meta.c:vlc_timer_schedule_asap Unexecuted instantiation: libmp4.c:vlc_timer_schedule_asap Unexecuted instantiation: nsv.c:vlc_timer_schedule_asap Unexecuted instantiation: ps.c:vlc_timer_schedule_asap Unexecuted instantiation: pva.c:vlc_timer_schedule_asap Unexecuted instantiation: sap.c:vlc_timer_schedule_asap Unexecuted instantiation: smf.c:vlc_timer_schedule_asap Unexecuted instantiation: subtitle.c:vlc_timer_schedule_asap Unexecuted instantiation: tta.c:vlc_timer_schedule_asap Unexecuted instantiation: encttml.c:vlc_timer_schedule_asap Unexecuted instantiation: substtml.c:vlc_timer_schedule_asap Unexecuted instantiation: ttml.c:vlc_timer_schedule_asap Unexecuted instantiation: ty.c:vlc_timer_schedule_asap Unexecuted instantiation: voc.c:vlc_timer_schedule_asap Unexecuted instantiation: wav.c:vlc_timer_schedule_asap Unexecuted instantiation: webvtt.c:vlc_timer_schedule_asap Unexecuted instantiation: encvtt.c:vlc_timer_schedule_asap Unexecuted instantiation: subsvtt.c:vlc_timer_schedule_asap Unexecuted instantiation: xa.c:vlc_timer_schedule_asap Unexecuted instantiation: a52.c:vlc_timer_schedule_asap Unexecuted instantiation: copy.c:vlc_timer_schedule_asap Unexecuted instantiation: dts.c:vlc_timer_schedule_asap Unexecuted instantiation: h264.c:vlc_timer_schedule_asap Unexecuted instantiation: hxxx_sei.c:vlc_timer_schedule_asap Unexecuted instantiation: hxxx_common.c:vlc_timer_schedule_asap Unexecuted instantiation: h264_nal.c:vlc_timer_schedule_asap Unexecuted instantiation: h264_slice.c:vlc_timer_schedule_asap Unexecuted instantiation: hevc.c:vlc_timer_schedule_asap Unexecuted instantiation: hevc_nal.c:vlc_timer_schedule_asap Unexecuted instantiation: mlp.c:vlc_timer_schedule_asap Unexecuted instantiation: mpeg4audio.c:vlc_timer_schedule_asap Unexecuted instantiation: mpeg4video.c:vlc_timer_schedule_asap Unexecuted instantiation: mpegaudio.c:vlc_timer_schedule_asap Unexecuted instantiation: mpegvideo.c:vlc_timer_schedule_asap Unexecuted instantiation: vc1.c:vlc_timer_schedule_asap Unexecuted instantiation: rawaud.c:vlc_timer_schedule_asap Unexecuted instantiation: rawvid.c:vlc_timer_schedule_asap Unexecuted instantiation: file.c:vlc_timer_schedule_asap Unexecuted instantiation: directory.c:vlc_timer_schedule_asap Unexecuted instantiation: libxml.c:vlc_timer_schedule_asap Unexecuted instantiation: ogg.c:vlc_timer_schedule_asap Unexecuted instantiation: oggseek.c:vlc_timer_schedule_asap Unexecuted instantiation: mkv.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: util.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: virtual_segment.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: matroska_segment.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: matroska_segment_parse.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: matroska_segment_seeker.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: demux.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: events.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: Ebml_parser.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: chapters.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: chapter_command.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: chapter_command_dvd.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: chapter_command_script.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: chapter_command_script_common.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: stream_io_callback.cpp:vlc_timer_schedule_asap(vlc_timer*, long) Unexecuted instantiation: adpcm.c:vlc_timer_schedule_asap Unexecuted instantiation: aes3.c:vlc_timer_schedule_asap Unexecuted instantiation: araw.c:vlc_timer_schedule_asap Unexecuted instantiation: g711.c:vlc_timer_schedule_asap Unexecuted instantiation: lpcm.c:vlc_timer_schedule_asap Unexecuted instantiation: uleaddvaudio.c:vlc_timer_schedule_asap Unexecuted instantiation: rawvideo.c:vlc_timer_schedule_asap Unexecuted instantiation: cc.c:vlc_timer_schedule_asap Unexecuted instantiation: cea708.c:vlc_timer_schedule_asap Unexecuted instantiation: cvdsub.c:vlc_timer_schedule_asap Unexecuted instantiation: dvbsub.c:vlc_timer_schedule_asap Unexecuted instantiation: scte18.c:vlc_timer_schedule_asap Unexecuted instantiation: scte27.c:vlc_timer_schedule_asap Unexecuted instantiation: spudec.c:vlc_timer_schedule_asap Unexecuted instantiation: parse.c:vlc_timer_schedule_asap Unexecuted instantiation: stl.c:vlc_timer_schedule_asap Unexecuted instantiation: subsdec.c:vlc_timer_schedule_asap Unexecuted instantiation: subsusf.c:vlc_timer_schedule_asap Unexecuted instantiation: svcdsub.c:vlc_timer_schedule_asap Unexecuted instantiation: textst.c:vlc_timer_schedule_asap Unexecuted instantiation: substx3g.c:vlc_timer_schedule_asap Unexecuted instantiation: libvlc.c:vlc_timer_schedule_asap Unexecuted instantiation: chain.c:vlc_timer_schedule_asap Unexecuted instantiation: help.c:vlc_timer_schedule_asap Unexecuted instantiation: cmdline.c:vlc_timer_schedule_asap Unexecuted instantiation: media_source.c:vlc_timer_schedule_asap Unexecuted instantiation: media_tree.c:vlc_timer_schedule_asap Unexecuted instantiation: modules.c:vlc_timer_schedule_asap Unexecuted instantiation: bank.c:vlc_timer_schedule_asap Unexecuted instantiation: entry.c:vlc_timer_schedule_asap Unexecuted instantiation: dialog.c:vlc_timer_schedule_asap Unexecuted instantiation: interface.c:vlc_timer_schedule_asap Unexecuted instantiation: content.c:vlc_timer_schedule_asap Unexecuted instantiation: control.c:vlc_timer_schedule_asap Unexecuted instantiation: item.c:vlc_timer_schedule_asap Unexecuted instantiation: notify.c:vlc_timer_schedule_asap Unexecuted instantiation: player.c:vlc_timer_schedule_asap Unexecuted instantiation: playlist.c:vlc_timer_schedule_asap Unexecuted instantiation: preparse.c:vlc_timer_schedule_asap Unexecuted instantiation: preparser.c:vlc_timer_schedule_asap Unexecuted instantiation: access.c:vlc_timer_schedule_asap Unexecuted instantiation: decoder_device.c:vlc_timer_schedule_asap Unexecuted instantiation: decoder_helpers.c:vlc_timer_schedule_asap Unexecuted instantiation: demux.c:vlc_timer_schedule_asap Unexecuted instantiation: input.c:vlc_timer_schedule_asap Unexecuted instantiation: attachment.c:vlc_timer_schedule_asap Unexecuted instantiation: timer.c:vlc_timer_schedule_asap Unexecuted instantiation: track.c:vlc_timer_schedule_asap Unexecuted instantiation: title.c:vlc_timer_schedule_asap Unexecuted instantiation: aout.c:vlc_timer_schedule_asap Unexecuted instantiation: vout.c:vlc_timer_schedule_asap Unexecuted instantiation: osd.c:vlc_timer_schedule_asap Unexecuted instantiation: medialib.c:vlc_timer_schedule_asap Unexecuted instantiation: resource.c:vlc_timer_schedule_asap Unexecuted instantiation: services_discovery.c:vlc_timer_schedule_asap Unexecuted instantiation: stats.c:vlc_timer_schedule_asap Unexecuted instantiation: stream.c:vlc_timer_schedule_asap Unexecuted instantiation: stream_extractor.c:vlc_timer_schedule_asap Unexecuted instantiation: stream_filter.c:vlc_timer_schedule_asap Unexecuted instantiation: stream_memory.c:vlc_timer_schedule_asap Unexecuted instantiation: subtitles.c:vlc_timer_schedule_asap Unexecuted instantiation: dec.c:vlc_timer_schedule_asap Unexecuted instantiation: filters.c:vlc_timer_schedule_asap Unexecuted instantiation: meter.c:vlc_timer_schedule_asap Unexecuted instantiation: output.c:vlc_timer_schedule_asap Unexecuted instantiation: volume.c:vlc_timer_schedule_asap Unexecuted instantiation: video_output.c:vlc_timer_schedule_asap Unexecuted instantiation: video_text.c:vlc_timer_schedule_asap Unexecuted instantiation: video_widgets.c:vlc_timer_schedule_asap Unexecuted instantiation: vout_subpictures.c:vlc_timer_schedule_asap Unexecuted instantiation: video_window.c:vlc_timer_schedule_asap Unexecuted instantiation: window.c:vlc_timer_schedule_asap Unexecuted instantiation: vout_intf.c:vlc_timer_schedule_asap Unexecuted instantiation: charset.c:vlc_timer_schedule_asap Unexecuted instantiation: strings.c:vlc_timer_schedule_asap Unexecuted instantiation: unicode.c:vlc_timer_schedule_asap Unexecuted instantiation: actions.c:vlc_timer_schedule_asap Unexecuted instantiation: executor.c:vlc_timer_schedule_asap Unexecuted instantiation: probe.c:vlc_timer_schedule_asap Unexecuted instantiation: frame.c:vlc_timer_schedule_asap Unexecuted instantiation: fifo.c:vlc_timer_schedule_asap Unexecuted instantiation: picture.c:vlc_timer_schedule_asap Unexecuted instantiation: picture_fifo.c:vlc_timer_schedule_asap Unexecuted instantiation: picture_pool.c:vlc_timer_schedule_asap Unexecuted instantiation: interrupt.c:vlc_timer_schedule_asap Unexecuted instantiation: keystore.c:vlc_timer_schedule_asap Unexecuted instantiation: rcu.c:vlc_timer_schedule_asap Unexecuted instantiation: renderer_discovery.c:vlc_timer_schedule_asap Unexecuted instantiation: threads.c:vlc_timer_schedule_asap Unexecuted instantiation: cpu.c:vlc_timer_schedule_asap Unexecuted instantiation: exit.c:vlc_timer_schedule_asap Unexecuted instantiation: image.c:vlc_timer_schedule_asap Unexecuted instantiation: messages.c:vlc_timer_schedule_asap Unexecuted instantiation: tracer.c:vlc_timer_schedule_asap Unexecuted instantiation: objects.c:vlc_timer_schedule_asap Unexecuted instantiation: objres.c:vlc_timer_schedule_asap Unexecuted instantiation: queue.c:vlc_timer_schedule_asap Unexecuted instantiation: variables.c:vlc_timer_schedule_asap Unexecuted instantiation: xml.c:vlc_timer_schedule_asap Unexecuted instantiation: filter.c:vlc_timer_schedule_asap Unexecuted instantiation: filter_chain.c:vlc_timer_schedule_asap Unexecuted instantiation: httpcookies.c:vlc_timer_schedule_asap Unexecuted instantiation: subpicture.c:vlc_timer_schedule_asap Unexecuted instantiation: medialibrary.c:vlc_timer_schedule_asap Unexecuted instantiation: thread.c:vlc_timer_schedule_asap Unexecuted instantiation: rand.c:vlc_timer_schedule_asap Unexecuted instantiation: specific.c:vlc_timer_schedule_asap Unexecuted instantiation: stream_output.c:vlc_timer_schedule_asap Unexecuted instantiation: vlm.c:vlc_timer_schedule_asap Unexecuted instantiation: vlm_event.c:vlc_timer_schedule_asap Unexecuted instantiation: vlmshell.c:vlc_timer_schedule_asap Unexecuted instantiation: libvlc-module.c:vlc_timer_schedule_asap Unexecuted instantiation: art.c:vlc_timer_schedule_asap Unexecuted instantiation: fetcher.c:vlc_timer_schedule_asap Unexecuted instantiation: clock.c:vlc_timer_schedule_asap Unexecuted instantiation: es_out.c:vlc_timer_schedule_asap Unexecuted instantiation: es_out_source.c:vlc_timer_schedule_asap Unexecuted instantiation: es_out_timeshift.c:vlc_timer_schedule_asap Unexecuted instantiation: display.c:vlc_timer_schedule_asap Unexecuted instantiation: inhibit.c:vlc_timer_schedule_asap Unexecuted instantiation: interlacing.c:vlc_timer_schedule_asap Unexecuted instantiation: snapshot.c:vlc_timer_schedule_asap Unexecuted instantiation: io.c:vlc_timer_schedule_asap Unexecuted instantiation: chroma_probe.c:vlc_timer_schedule_asap Unexecuted instantiation: dirs.c:vlc_timer_schedule_asap Unexecuted instantiation: getaddrinfo.c:vlc_timer_schedule_asap Unexecuted instantiation: input_clock.c:vlc_timer_schedule_asap |
935 | | |
936 | | /** |
937 | | * Fetches and resets the overrun counter for a timer. |
938 | | * |
939 | | * This functions returns the number of times that the interval timer should |
940 | | * have fired, but the callback was not invoked due to scheduling problems. |
941 | | * The call resets the counter to zero. |
942 | | * |
943 | | * \param timer initialized timer |
944 | | * \return the timer overrun counter (typically zero) |
945 | | */ |
946 | | VLC_API unsigned vlc_timer_getoverrun(vlc_timer_t timer) VLC_USED; |
947 | | |
948 | | /** @} */ |
949 | | |
950 | | /** |
951 | | * Count CPUs. |
952 | | * |
953 | | * \return number of available (logical) CPUs. |
954 | | */ |
955 | | VLC_API unsigned vlc_GetCPUCount(void); |
956 | | |
957 | | #if defined (LIBVLC_USE_PTHREAD_CLEANUP) |
958 | | /** |
959 | | * Registers a thread cancellation handler. |
960 | | * |
961 | | * This pushes a function to run if the thread is cancelled (or otherwise |
962 | | * exits prematurely). |
963 | | * |
964 | | * If multiple procedures are registered, |
965 | | * they are handled in last-in first-out order. |
966 | | * |
967 | | * \note Any call to vlc_cleanup_push() <b>must</b> paired with a call to |
968 | | * vlc_cleanup_pop(). |
969 | | * \warning Branching into or out of the block between these two function calls |
970 | | * is not allowed (read: it will likely crash the whole process). |
971 | | * |
972 | | * \param routine procedure to call if the thread ends |
973 | | * \param arg argument for the procedure |
974 | | */ |
975 | 0 | # define vlc_cleanup_push( routine, arg ) pthread_cleanup_push (routine, arg) |
976 | | |
977 | | /** |
978 | | * Unregisters the last cancellation handler. |
979 | | * |
980 | | * This pops the cancellation handler that was last pushed with |
981 | | * vlc_cleanup_push() in the calling thread. |
982 | | */ |
983 | 0 | # define vlc_cleanup_pop( ) pthread_cleanup_pop (0) |
984 | | |
985 | | #else /* !LIBVLC_USE_PTHREAD_CLEANUP */ |
986 | | struct vlc_cleanup_t |
987 | | { |
988 | | vlc_cleanup_t *next; |
989 | | void (*proc) (void *); |
990 | | void *data; |
991 | | }; |
992 | | |
993 | | # ifndef __cplusplus |
994 | | /* This macros opens a code block on purpose: It reduces the chance of |
995 | | * not pairing the push and pop. It also matches the POSIX Thread internals. |
996 | | * That way, Win32 developers will not accidentally break other platforms. |
997 | | */ |
998 | | # define vlc_cleanup_push( routine, arg ) \ |
999 | | do { \ |
1000 | | vlc_control_cancel(&(vlc_cleanup_t){ NULL, routine, arg }) |
1001 | | |
1002 | | # define vlc_cleanup_pop( ) \ |
1003 | | vlc_control_cancel (NULL); \ |
1004 | | } while (0) |
1005 | | # else |
1006 | | # define vlc_cleanup_push(routine, arg) \ |
1007 | | static_assert(false, "don't use vlc_cleanup_push in portable C++ code") |
1008 | | # define vlc_cleanup_pop() \ |
1009 | | static_assert(false, "don't use vlc_cleanup_pop in portable C++ code") |
1010 | | # endif |
1011 | | |
1012 | | #endif /* !LIBVLC_USE_PTHREAD_CLEANUP */ |
1013 | | |
1014 | | #ifdef __cplusplus |
1015 | | /** |
1016 | | * Helper C++ class to lock a mutex. |
1017 | | * |
1018 | | * The mutex is locked when the object is created, and unlocked when the object |
1019 | | * is destroyed. |
1020 | | */ |
1021 | | class vlc_mutex_locker |
1022 | | { |
1023 | | private: |
1024 | | vlc_mutex_t *lock; |
1025 | | public: |
1026 | 1.31k | vlc_mutex_locker (vlc_mutex_t *m) : lock (m) |
1027 | 1.31k | { |
1028 | 1.31k | vlc_mutex_lock (lock); |
1029 | 1.31k | } |
1030 | | |
1031 | | ~vlc_mutex_locker (void) |
1032 | 1.31k | { |
1033 | 1.31k | vlc_mutex_unlock (lock); |
1034 | 1.31k | } |
1035 | | }; |
1036 | | |
1037 | | #endif |
1038 | | |
1039 | | enum |
1040 | | { |
1041 | | VLC_AVCODEC_MUTEX = 0, |
1042 | | VLC_GCRYPT_MUTEX, |
1043 | | VLC_XLIB_MUTEX, |
1044 | | VLC_MOSAIC_MUTEX, |
1045 | | #ifdef _WIN32 |
1046 | | VLC_MTA_MUTEX, |
1047 | | #endif |
1048 | | /* Insert new entry HERE */ |
1049 | | VLC_MAX_MUTEX |
1050 | | }; |
1051 | | |
1052 | | /** |
1053 | | * Internal handler for global mutexes. |
1054 | | * |
1055 | | * Do not use this function directly. Use helper macros instead: |
1056 | | * vlc_global_lock(), vlc_global_unlock(). |
1057 | | */ |
1058 | | VLC_API void vlc_global_mutex(unsigned, bool); |
1059 | | |
1060 | | /** |
1061 | | * Acquires a global mutex. |
1062 | | */ |
1063 | | #define vlc_global_lock( n ) vlc_global_mutex(n, true) |
1064 | | |
1065 | | /** |
1066 | | * Releases a global mutex. |
1067 | | */ |
1068 | | #define vlc_global_unlock( n ) vlc_global_mutex(n, false) |
1069 | | |
1070 | | /** @} */ |
1071 | | |
1072 | | #endif /* !_VLC_THREADS_H */ |