/src/libusb/libusb/os/threads_posix.h
Line | Count | Source |
1 | | /* |
2 | | * libusb synchronization using POSIX Threads |
3 | | * |
4 | | * Copyright © 2010 Peter Stuge <peter@stuge.se> |
5 | | * |
6 | | * This library is free software; you can redistribute it and/or |
7 | | * modify it under the terms of the GNU Lesser General Public |
8 | | * License as published by the Free Software Foundation; either |
9 | | * version 2.1 of the License, or (at your option) any later version. |
10 | | * |
11 | | * This library is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | | * Lesser General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU Lesser General Public |
17 | | * License along with this library; if not, write to the Free Software |
18 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | | */ |
20 | | |
21 | | #ifndef LIBUSB_THREADS_POSIX_H |
22 | | #define LIBUSB_THREADS_POSIX_H |
23 | | |
24 | | #include <pthread.h> |
25 | | |
26 | 532 | #define PTHREAD_CHECK(expression) ASSERT_EQ(expression, 0) |
27 | | |
28 | | #define USBI_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER |
29 | | typedef pthread_mutex_t usbi_mutex_static_t; |
30 | | static inline void usbi_mutex_static_lock(usbi_mutex_static_t *mutex) |
31 | 0 | { |
32 | 0 | PTHREAD_CHECK(pthread_mutex_lock(mutex)); |
33 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_mutex_static_lock(pthread_mutex_t*) Unexecuted instantiation: io.c:usbi_mutex_static_lock Unexecuted instantiation: events_posix.c:usbi_mutex_static_lock Unexecuted instantiation: threads_posix.c:usbi_mutex_static_lock Unexecuted instantiation: linux_usbfs.c:usbi_mutex_static_lock Unexecuted instantiation: linux_udev.c:usbi_mutex_static_lock Unexecuted instantiation: core.c:usbi_mutex_static_lock Unexecuted instantiation: descriptor.c:usbi_mutex_static_lock Unexecuted instantiation: hotplug.c:usbi_mutex_static_lock Unexecuted instantiation: sync.c:usbi_mutex_static_lock |
34 | | static inline void usbi_mutex_static_unlock(usbi_mutex_static_t *mutex) |
35 | 0 | { |
36 | 0 | PTHREAD_CHECK(pthread_mutex_unlock(mutex)); |
37 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_mutex_static_unlock(pthread_mutex_t*) Unexecuted instantiation: io.c:usbi_mutex_static_unlock Unexecuted instantiation: events_posix.c:usbi_mutex_static_unlock Unexecuted instantiation: threads_posix.c:usbi_mutex_static_unlock Unexecuted instantiation: linux_usbfs.c:usbi_mutex_static_unlock Unexecuted instantiation: linux_udev.c:usbi_mutex_static_unlock Unexecuted instantiation: core.c:usbi_mutex_static_unlock Unexecuted instantiation: descriptor.c:usbi_mutex_static_unlock Unexecuted instantiation: hotplug.c:usbi_mutex_static_unlock Unexecuted instantiation: sync.c:usbi_mutex_static_unlock |
38 | | |
39 | | typedef pthread_mutex_t usbi_mutex_t; |
40 | | static inline void usbi_mutex_init(usbi_mutex_t *mutex) |
41 | 266 | { |
42 | 266 | PTHREAD_CHECK(pthread_mutex_init(mutex, NULL)); |
43 | 266 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_mutex_init(pthread_mutex_t*) Line | Count | Source | 41 | 266 | { | 42 | | PTHREAD_CHECK(pthread_mutex_init(mutex, NULL)); | 43 | 266 | } |
Unexecuted instantiation: events_posix.c:usbi_mutex_init Unexecuted instantiation: threads_posix.c:usbi_mutex_init Unexecuted instantiation: linux_usbfs.c:usbi_mutex_init Unexecuted instantiation: linux_udev.c:usbi_mutex_init Unexecuted instantiation: core.c:usbi_mutex_init Unexecuted instantiation: descriptor.c:usbi_mutex_init Unexecuted instantiation: hotplug.c:usbi_mutex_init Unexecuted instantiation: sync.c:usbi_mutex_init |
44 | | static inline void usbi_mutex_lock(usbi_mutex_t *mutex) |
45 | 0 | { |
46 | 0 | PTHREAD_CHECK(pthread_mutex_lock(mutex)); |
47 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_mutex_lock(pthread_mutex_t*) Unexecuted instantiation: io.c:usbi_mutex_lock Unexecuted instantiation: events_posix.c:usbi_mutex_lock Unexecuted instantiation: threads_posix.c:usbi_mutex_lock Unexecuted instantiation: linux_usbfs.c:usbi_mutex_lock Unexecuted instantiation: linux_udev.c:usbi_mutex_lock Unexecuted instantiation: core.c:usbi_mutex_lock Unexecuted instantiation: descriptor.c:usbi_mutex_lock Unexecuted instantiation: hotplug.c:usbi_mutex_lock Unexecuted instantiation: sync.c:usbi_mutex_lock |
48 | | static inline void usbi_mutex_unlock(usbi_mutex_t *mutex) |
49 | 0 | { |
50 | 0 | PTHREAD_CHECK(pthread_mutex_unlock(mutex)); |
51 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_mutex_unlock(pthread_mutex_t*) Unexecuted instantiation: io.c:usbi_mutex_unlock Unexecuted instantiation: events_posix.c:usbi_mutex_unlock Unexecuted instantiation: threads_posix.c:usbi_mutex_unlock Unexecuted instantiation: linux_usbfs.c:usbi_mutex_unlock Unexecuted instantiation: linux_udev.c:usbi_mutex_unlock Unexecuted instantiation: core.c:usbi_mutex_unlock Unexecuted instantiation: descriptor.c:usbi_mutex_unlock Unexecuted instantiation: hotplug.c:usbi_mutex_unlock Unexecuted instantiation: sync.c:usbi_mutex_unlock |
52 | | static inline int usbi_mutex_trylock(usbi_mutex_t *mutex) |
53 | 0 | { |
54 | 0 | int mutexIsLocked = pthread_mutex_trylock(mutex) == 0; |
55 | 0 | return mutexIsLocked; |
56 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_mutex_trylock(pthread_mutex_t*) Unexecuted instantiation: io.c:usbi_mutex_trylock Unexecuted instantiation: events_posix.c:usbi_mutex_trylock Unexecuted instantiation: threads_posix.c:usbi_mutex_trylock Unexecuted instantiation: linux_usbfs.c:usbi_mutex_trylock Unexecuted instantiation: linux_udev.c:usbi_mutex_trylock Unexecuted instantiation: core.c:usbi_mutex_trylock Unexecuted instantiation: descriptor.c:usbi_mutex_trylock Unexecuted instantiation: hotplug.c:usbi_mutex_trylock Unexecuted instantiation: sync.c:usbi_mutex_trylock |
57 | | static inline void usbi_mutex_destroy(usbi_mutex_t *mutex) |
58 | 266 | { |
59 | 266 | PTHREAD_CHECK(pthread_mutex_destroy(mutex)); |
60 | 266 | } libusb_fuzzer.cc:usbi_mutex_destroy(pthread_mutex_t*) Line | Count | Source | 58 | 266 | { | 59 | | PTHREAD_CHECK(pthread_mutex_destroy(mutex)); | 60 | 266 | } |
Unexecuted instantiation: io.c:usbi_mutex_destroy Unexecuted instantiation: events_posix.c:usbi_mutex_destroy Unexecuted instantiation: threads_posix.c:usbi_mutex_destroy Unexecuted instantiation: linux_usbfs.c:usbi_mutex_destroy Unexecuted instantiation: linux_udev.c:usbi_mutex_destroy Unexecuted instantiation: core.c:usbi_mutex_destroy Unexecuted instantiation: descriptor.c:usbi_mutex_destroy Unexecuted instantiation: hotplug.c:usbi_mutex_destroy Unexecuted instantiation: sync.c:usbi_mutex_destroy |
61 | | |
62 | | #define USBI_COND_INITIALIZER PTHREAD_COND_INITIALIZER |
63 | | typedef pthread_cond_t usbi_cond_t; |
64 | | void usbi_cond_init(usbi_cond_t *cond); |
65 | | static inline void usbi_cond_wait(usbi_cond_t *cond, usbi_mutex_t *mutex) |
66 | 0 | { |
67 | 0 | PTHREAD_CHECK(pthread_cond_wait(cond, mutex)); |
68 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_cond_wait(pthread_cond_t*, pthread_mutex_t*) Unexecuted instantiation: io.c:usbi_cond_wait Unexecuted instantiation: events_posix.c:usbi_cond_wait Unexecuted instantiation: threads_posix.c:usbi_cond_wait Unexecuted instantiation: linux_usbfs.c:usbi_cond_wait Unexecuted instantiation: linux_udev.c:usbi_cond_wait Unexecuted instantiation: core.c:usbi_cond_wait Unexecuted instantiation: descriptor.c:usbi_cond_wait Unexecuted instantiation: hotplug.c:usbi_cond_wait Unexecuted instantiation: sync.c:usbi_cond_wait |
69 | | int usbi_cond_timedwait(usbi_cond_t *cond, |
70 | | usbi_mutex_t *mutex, const struct timeval *tv); |
71 | | static inline void usbi_cond_signal(usbi_cond_t *cond) |
72 | 0 | { |
73 | 0 | PTHREAD_CHECK(pthread_cond_signal(cond)); |
74 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_cond_signal(pthread_cond_t*) Unexecuted instantiation: io.c:usbi_cond_signal Unexecuted instantiation: events_posix.c:usbi_cond_signal Unexecuted instantiation: threads_posix.c:usbi_cond_signal Unexecuted instantiation: linux_usbfs.c:usbi_cond_signal Unexecuted instantiation: linux_udev.c:usbi_cond_signal Unexecuted instantiation: core.c:usbi_cond_signal Unexecuted instantiation: descriptor.c:usbi_cond_signal Unexecuted instantiation: hotplug.c:usbi_cond_signal Unexecuted instantiation: sync.c:usbi_cond_signal |
75 | | static inline void usbi_cond_broadcast(usbi_cond_t *cond) |
76 | 0 | { |
77 | 0 | PTHREAD_CHECK(pthread_cond_broadcast(cond)); |
78 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_cond_broadcast(pthread_cond_t*) Unexecuted instantiation: io.c:usbi_cond_broadcast Unexecuted instantiation: events_posix.c:usbi_cond_broadcast Unexecuted instantiation: threads_posix.c:usbi_cond_broadcast Unexecuted instantiation: linux_usbfs.c:usbi_cond_broadcast Unexecuted instantiation: linux_udev.c:usbi_cond_broadcast Unexecuted instantiation: core.c:usbi_cond_broadcast Unexecuted instantiation: descriptor.c:usbi_cond_broadcast Unexecuted instantiation: hotplug.c:usbi_cond_broadcast Unexecuted instantiation: sync.c:usbi_cond_broadcast |
79 | | static inline void usbi_cond_destroy(usbi_cond_t *cond) |
80 | 0 | { |
81 | 0 | PTHREAD_CHECK(pthread_cond_destroy(cond)); |
82 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_cond_destroy(pthread_cond_t*) Unexecuted instantiation: io.c:usbi_cond_destroy Unexecuted instantiation: events_posix.c:usbi_cond_destroy Unexecuted instantiation: threads_posix.c:usbi_cond_destroy Unexecuted instantiation: linux_usbfs.c:usbi_cond_destroy Unexecuted instantiation: linux_udev.c:usbi_cond_destroy Unexecuted instantiation: core.c:usbi_cond_destroy Unexecuted instantiation: descriptor.c:usbi_cond_destroy Unexecuted instantiation: hotplug.c:usbi_cond_destroy Unexecuted instantiation: sync.c:usbi_cond_destroy |
83 | | |
84 | | typedef pthread_key_t usbi_tls_key_t; |
85 | | static inline void usbi_tls_key_create(usbi_tls_key_t *key) |
86 | 0 | { |
87 | 0 | PTHREAD_CHECK(pthread_key_create(key, NULL)); |
88 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_tls_key_create(unsigned int*) Unexecuted instantiation: io.c:usbi_tls_key_create Unexecuted instantiation: events_posix.c:usbi_tls_key_create Unexecuted instantiation: threads_posix.c:usbi_tls_key_create Unexecuted instantiation: linux_usbfs.c:usbi_tls_key_create Unexecuted instantiation: linux_udev.c:usbi_tls_key_create Unexecuted instantiation: core.c:usbi_tls_key_create Unexecuted instantiation: descriptor.c:usbi_tls_key_create Unexecuted instantiation: hotplug.c:usbi_tls_key_create Unexecuted instantiation: sync.c:usbi_tls_key_create |
89 | | static inline void *usbi_tls_key_get(usbi_tls_key_t key) |
90 | 0 | { |
91 | 0 | return pthread_getspecific(key); |
92 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_tls_key_get(unsigned int) Unexecuted instantiation: io.c:usbi_tls_key_get Unexecuted instantiation: events_posix.c:usbi_tls_key_get Unexecuted instantiation: threads_posix.c:usbi_tls_key_get Unexecuted instantiation: linux_usbfs.c:usbi_tls_key_get Unexecuted instantiation: linux_udev.c:usbi_tls_key_get Unexecuted instantiation: core.c:usbi_tls_key_get Unexecuted instantiation: descriptor.c:usbi_tls_key_get Unexecuted instantiation: hotplug.c:usbi_tls_key_get Unexecuted instantiation: sync.c:usbi_tls_key_get |
93 | | static inline void usbi_tls_key_set(usbi_tls_key_t key, void *ptr) |
94 | 0 | { |
95 | 0 | PTHREAD_CHECK(pthread_setspecific(key, ptr)); |
96 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_tls_key_set(unsigned int, void*) Unexecuted instantiation: io.c:usbi_tls_key_set Unexecuted instantiation: events_posix.c:usbi_tls_key_set Unexecuted instantiation: threads_posix.c:usbi_tls_key_set Unexecuted instantiation: linux_usbfs.c:usbi_tls_key_set Unexecuted instantiation: linux_udev.c:usbi_tls_key_set Unexecuted instantiation: core.c:usbi_tls_key_set Unexecuted instantiation: descriptor.c:usbi_tls_key_set Unexecuted instantiation: hotplug.c:usbi_tls_key_set Unexecuted instantiation: sync.c:usbi_tls_key_set |
97 | | static inline void usbi_tls_key_delete(usbi_tls_key_t key) |
98 | 0 | { |
99 | | PTHREAD_CHECK(pthread_key_delete(key)); |
100 | 0 | } Unexecuted instantiation: libusb_fuzzer.cc:usbi_tls_key_delete(unsigned int) Unexecuted instantiation: io.c:usbi_tls_key_delete Unexecuted instantiation: events_posix.c:usbi_tls_key_delete Unexecuted instantiation: threads_posix.c:usbi_tls_key_delete Unexecuted instantiation: linux_usbfs.c:usbi_tls_key_delete Unexecuted instantiation: linux_udev.c:usbi_tls_key_delete Unexecuted instantiation: core.c:usbi_tls_key_delete Unexecuted instantiation: descriptor.c:usbi_tls_key_delete Unexecuted instantiation: hotplug.c:usbi_tls_key_delete Unexecuted instantiation: sync.c:usbi_tls_key_delete |
101 | | |
102 | | unsigned long usbi_get_tid(void); |
103 | | |
104 | | #endif /* LIBUSB_THREADS_POSIX_H */ |