/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 | 0 | #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: core.c:usbi_mutex_static_lock Unexecuted instantiation: descriptor.c:usbi_mutex_static_lock Unexecuted instantiation: hotplug.c:usbi_mutex_static_lock Unexecuted instantiation: io.c:usbi_mutex_static_lock Unexecuted instantiation: strerror.c:usbi_mutex_static_lock Unexecuted instantiation: sync.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_netlink.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: core.c:usbi_mutex_static_unlock Unexecuted instantiation: descriptor.c:usbi_mutex_static_unlock Unexecuted instantiation: hotplug.c:usbi_mutex_static_unlock Unexecuted instantiation: io.c:usbi_mutex_static_unlock Unexecuted instantiation: strerror.c:usbi_mutex_static_unlock Unexecuted instantiation: sync.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_netlink.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 | 0 | { |
42 | 0 | PTHREAD_CHECK(pthread_mutex_init(mutex, NULL)); |
43 | 0 | } Unexecuted instantiation: core.c:usbi_mutex_init Unexecuted instantiation: descriptor.c:usbi_mutex_init Unexecuted instantiation: hotplug.c:usbi_mutex_init Unexecuted instantiation: io.c:usbi_mutex_init Unexecuted instantiation: strerror.c:usbi_mutex_init Unexecuted instantiation: sync.c:usbi_mutex_init 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_netlink.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: core.c:usbi_mutex_lock Unexecuted instantiation: descriptor.c:usbi_mutex_lock Unexecuted instantiation: hotplug.c:usbi_mutex_lock Unexecuted instantiation: io.c:usbi_mutex_lock Unexecuted instantiation: strerror.c:usbi_mutex_lock Unexecuted instantiation: sync.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_netlink.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: core.c:usbi_mutex_unlock Unexecuted instantiation: descriptor.c:usbi_mutex_unlock Unexecuted instantiation: hotplug.c:usbi_mutex_unlock Unexecuted instantiation: io.c:usbi_mutex_unlock Unexecuted instantiation: strerror.c:usbi_mutex_unlock Unexecuted instantiation: sync.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_netlink.c:usbi_mutex_unlock |
52 | | static inline int usbi_mutex_trylock(usbi_mutex_t *mutex) |
53 | 0 | { |
54 | 0 | return pthread_mutex_trylock(mutex) == 0; |
55 | 0 | } Unexecuted instantiation: core.c:usbi_mutex_trylock Unexecuted instantiation: descriptor.c:usbi_mutex_trylock Unexecuted instantiation: hotplug.c:usbi_mutex_trylock Unexecuted instantiation: io.c:usbi_mutex_trylock Unexecuted instantiation: strerror.c:usbi_mutex_trylock Unexecuted instantiation: sync.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_netlink.c:usbi_mutex_trylock |
56 | | static inline void usbi_mutex_destroy(usbi_mutex_t *mutex) |
57 | 0 | { |
58 | 0 | PTHREAD_CHECK(pthread_mutex_destroy(mutex)); |
59 | 0 | } Unexecuted instantiation: core.c:usbi_mutex_destroy Unexecuted instantiation: descriptor.c:usbi_mutex_destroy Unexecuted instantiation: hotplug.c:usbi_mutex_destroy Unexecuted instantiation: io.c:usbi_mutex_destroy Unexecuted instantiation: strerror.c:usbi_mutex_destroy Unexecuted instantiation: sync.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_netlink.c:usbi_mutex_destroy |
60 | | |
61 | | typedef pthread_cond_t usbi_cond_t; |
62 | | void usbi_cond_init(pthread_cond_t *cond); |
63 | | static inline void usbi_cond_wait(usbi_cond_t *cond, usbi_mutex_t *mutex) |
64 | 0 | { |
65 | 0 | PTHREAD_CHECK(pthread_cond_wait(cond, mutex)); |
66 | 0 | } Unexecuted instantiation: core.c:usbi_cond_wait Unexecuted instantiation: descriptor.c:usbi_cond_wait Unexecuted instantiation: hotplug.c:usbi_cond_wait Unexecuted instantiation: io.c:usbi_cond_wait Unexecuted instantiation: strerror.c:usbi_cond_wait Unexecuted instantiation: sync.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_netlink.c:usbi_cond_wait |
67 | | int usbi_cond_timedwait(usbi_cond_t *cond, |
68 | | usbi_mutex_t *mutex, const struct timeval *tv); |
69 | | static inline void usbi_cond_broadcast(usbi_cond_t *cond) |
70 | 0 | { |
71 | 0 | PTHREAD_CHECK(pthread_cond_broadcast(cond)); |
72 | 0 | } Unexecuted instantiation: core.c:usbi_cond_broadcast Unexecuted instantiation: descriptor.c:usbi_cond_broadcast Unexecuted instantiation: hotplug.c:usbi_cond_broadcast Unexecuted instantiation: io.c:usbi_cond_broadcast Unexecuted instantiation: strerror.c:usbi_cond_broadcast Unexecuted instantiation: sync.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_netlink.c:usbi_cond_broadcast |
73 | | static inline void usbi_cond_destroy(usbi_cond_t *cond) |
74 | 0 | { |
75 | 0 | PTHREAD_CHECK(pthread_cond_destroy(cond)); |
76 | 0 | } Unexecuted instantiation: core.c:usbi_cond_destroy Unexecuted instantiation: descriptor.c:usbi_cond_destroy Unexecuted instantiation: hotplug.c:usbi_cond_destroy Unexecuted instantiation: io.c:usbi_cond_destroy Unexecuted instantiation: strerror.c:usbi_cond_destroy Unexecuted instantiation: sync.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_netlink.c:usbi_cond_destroy |
77 | | |
78 | | typedef pthread_key_t usbi_tls_key_t; |
79 | | static inline void usbi_tls_key_create(usbi_tls_key_t *key) |
80 | 0 | { |
81 | 0 | PTHREAD_CHECK(pthread_key_create(key, NULL)); |
82 | 0 | } 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: io.c:usbi_tls_key_create Unexecuted instantiation: strerror.c:usbi_tls_key_create Unexecuted instantiation: sync.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_netlink.c:usbi_tls_key_create |
83 | | static inline void *usbi_tls_key_get(usbi_tls_key_t key) |
84 | 0 | { |
85 | 0 | return pthread_getspecific(key); |
86 | 0 | } 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: io.c:usbi_tls_key_get Unexecuted instantiation: strerror.c:usbi_tls_key_get Unexecuted instantiation: sync.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_netlink.c:usbi_tls_key_get |
87 | | static inline void usbi_tls_key_set(usbi_tls_key_t key, void *ptr) |
88 | 0 | { |
89 | 0 | PTHREAD_CHECK(pthread_setspecific(key, ptr)); |
90 | 0 | } 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: io.c:usbi_tls_key_set Unexecuted instantiation: strerror.c:usbi_tls_key_set Unexecuted instantiation: sync.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_netlink.c:usbi_tls_key_set |
91 | | static inline void usbi_tls_key_delete(usbi_tls_key_t key) |
92 | 0 | { |
93 | | PTHREAD_CHECK(pthread_key_delete(key)); |
94 | 0 | } 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: io.c:usbi_tls_key_delete Unexecuted instantiation: strerror.c:usbi_tls_key_delete Unexecuted instantiation: sync.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_netlink.c:usbi_tls_key_delete |
95 | | |
96 | | unsigned long usbi_get_tid(void); |
97 | | |
98 | | #endif /* LIBUSB_THREADS_POSIX_H */ |