node-usb-issue-418-delay-at-exit
Reproducing an issue where exiting a program after using node-usb
v1.7.0 is significantly delayed.
Behavior differs between versions of node-usb
as well as between versions of Node.js.
Timing summary:
v12.22.1 | v14.16.1 | v16.0.0 | |
---|---|---|---|
v1.6.5 | 50 ms | 50 ms | 50 ms |
v1.7.0 | 8000 ms | 8000 ms | ∞ |
The sample size is small, but the difference between "no delay" (less than 100 milliseconds execution time), "long delay" (8-9 seconds), and "does not exit" (several minutes at least) is noticeable on a human scale.
Note that the program code in index.js
itself may have bugs. It is essentially a boiled-downed version of the USB Video Class (UVC) device configurator uvcc
command line interface, where the issue was first reported.
See
Steps to verify
# NOTE: installing the specific problematic version.
npm install --no-save usb@=1.7.0
# NOTE: you can skip using "time" since the delay is noticeable on a human scale.
time node index.js
Sample output (node-usb v1.7.0, Node.js v16.0.0)
node --version
v16.0.0
time node index.js
{
idVendor: 1133,
idProduct: 2093,
deviceAddress: 3,
iProduct: '"HD Pro Webcam C920"'
}
{ whiteBalanceTemperature: 4144 }
^C
node index.js 0.05s user 0.00s system 0% cpu 1:02.88 total
The terminal output is shown immediatelly, but the program has to be forced to stop with ctrl+c.
Test setup
Node.js versions were selected using n
(yes, it's a single character name).
n latest
installed : v16.0.0 to /home/joelpurra/.n/bin/node
active : v16.0.0 at /usr/local/bin/node
Verified on Ubuntu 20.10.
uname --all
Linux Computer 5.4.0-72-generic #80-Ubuntu SMP Mon Apr 12 17:35:00 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Verified on macOS 10.14 (Mojave).
uname -a
Darwin Computer 18.7.0 Darwin Kernel Version 18.7.0: Tue Jan 12 22:04:47 PST 2021; root:xnu-4903.278.56~1/RELEASE_X86_64 x86_64
Workaround
- Run the steps above to verify that the code crashes.
- Switch to
node-usb
v1.6.5. - Verify that it works.
# NOTE: clean up.
rm --recursive node_modules/
# NOTE: installing the specific working version.
npm install --no-save usb@=1.6.5
time node index.js
node-usb-issue-418-delay-at-exit Copyright © 2021 Joel Purra. Released under MIT License. Your donations are appreciated!