Red Hat Bugzilla – Bug 273901
Set of small optimizations
Last modified: 2013-07-02 19:22:23 EDT
Description of problem:
Seeing libusb start up is currently painful. usb_find_devices open all kinds of
files and tries to read from them. This can never work for directories and
since we know when a directory entry is a directory, why not skip them?
This is what d_type is for. The patch adds support for it.
The next optimization is to use openat() instead of open() to open files in
directories. Not only is this more efficient, it also does not impose file name
length limits, and is potentially more secure. For this to work the autoconf
tests must be extended for openat (and define HAVE_OPENAT) and define
_GNU_SOURCE in CFLAGS. I didn't attach a patch for that part.
Lastly, while we are at it, I changed a couple of malloc+memset in calloc. It's
more efficient (sometimes significantly so) and it is more safe because in
future two places don't have to be changed in lockstep.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1.start any program using usb_find_devices
lots of unnecessary opens
skip those directory entries
I'll file the problem also upstream but we should apply these changes even
before upstream uses them. Let's reduce startup times.
Created attachment 184501 [details]
Small set of optimizations