| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
This fixes a regression introduced in 0ff5cca6 which causes a rare deadlock in
fwupd.
|
|
|
|
|
|
| |
This reverts commit cfb40102b0985d52cbd5d9348dedd1a4cc06b10c -- it's the
wrong fix as the hotplug callback is being called by two different threads;
even a recursive mutex isn't going to save us there.
|
|
|
|
|
|
|
|
|
| |
If we call libusb_get_bos_descriptor() in the hotplug device-add handler then
we eventually call libusb_handle_events_completed() which can run handle_events
-- which might emit devices.
Using a mutex that's safe for recursing prevents the deadlock.
This fixes half the problem when getting descriptors on deeply nested USB hubs.
|
|
|
|
|
| |
This would allow us, for example, to only load devices in bootloader or runtime
phases.
|
| |
|
| |
|
|
|
|
| |
This allows us to see which phase of the emulation should be used.
|
| |
|
| |
|
|
|
|
| |
This is needed to emulate devices with bootloader modes.
|
| |
|
|
|
|
|
| |
This is required to emulate devices that just reset (without completing the
current transfer) when asked to reset.
|
|
|
|
|
| |
This will prevent crashes if the caller is casting from a const buffer to a
mutable buffer.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
PVS: Converting type 'gssize' to type 'gboolean' can lead to a loss of high-order bits.
|
|
|
|
|
|
| |
This allows us to simulate an entire context of devices, simulating responses
as if the hardware is connected. This allows building rich device-specific
unit tests in programs like fwupd, without having to have the hardware attached.
|
| |
|
| |
|
| |
|
|
|
|
| |
There's no point keep asking the device for BOS descriptors when it has none.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
This allows us to write tests that mock up entire devices.
|
|
|
|
|
| |
This can speed up device enumeration, and also allows us to emulate the
interfaces or descriptors in the future.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This frees up mental energy when reviewing patches and is something I
should have done a long time ago.
|
| |
|
|
|
|
| |
We started using this several months ago and nobody even noticed.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
The end year is legally and functionally redundant, and more importantly
causes cherry-pick conflicts when trying to maintain old branches.
|
|
|
|
| |
The primary purpose for this is to test the hotplug codepaths.
|
|
|
|
|
| |
Also, reduce the number of idle sources by batching them up as much as
possible.
|
| |
|
| |
|
|
|
|
| |
Somehow this worked when we unref'd the context but did not ref it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On FreeBSD, symbols 'environ' and ' __progname' are defined in crt1.o
and referenced by libc.so. This makes it different from platforms which
define 'environ' in libc.so. GNU BFD linker fails to link an executable
if these two symbols are not put into the global section of the version
script because a shared library should not reference a local symbol
defined in a different object file. GNU gold and LLVM LLD don't have
the problem.
This means the current check for --version-script fails on FreeBSD when
GNU BFD linker is used. The failure can be avoided by linking a shared
library instead of an executable, but meson doesn't support passing
additional arguments to the compiler in its 'has_link_argument' method.
Instead of adding these two unused symbols to the real version script,
use a smaller version script specifically made for the test.
|
|
|
|
|
| |
Instead of keeping a list of OS in the build file, it should be better
to run a check to determine if it is supported by the linker.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Initial device enumeration may happen in a random order. This causes
issues if someone calls g_usb_device_get_parent from the "device-added"
signal handler. The problem is. that this will cause an infinite
recursion as GUsb tries to enumerate again, which results in the device
to be added. Also, the order of devices is random and resolving the
parent requires the full list of devices. As such, we should delay
emission until the internal array has been filled.
To fix this, emit the signals from g_usb_context_enumerate.
Also, while changing this, it became obvious that libusb hotplug callback
is updating priv->devices from the libusb thread, only pushing it to an
idle handler when the signal is emitted. Doing this is unsafe if hotplug
events arrive during enumeration. Push libusb event into the mainloop
immediately in order to process it.
Doing means that any libusb hotplug events arriving during
g_usb_context_enumerate will be handled after the function has returned.
Making all possible corner cases behave correctly.
|
|
|
|
|
|
|
| |
Some devices won't answer to a request with a 128-byte data buffer, this
allows the user to specify the size of the request data
buffer. g_usb_device_get_string_descriptor_bytes still uses the default
buffer size (128 bytes).
|