Coverage Report

Created: 2026-04-28 06:49

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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 */