Now available for your delight and/or horror. <http://github.com/sourcejedi/udev/commits/threading-v0.3> For now, I'm still treating this as a patch series. That is, I may publish future versions with a rewritten history. I'll preserve the old branches though. It turns out the MADV_DONTFORK hack I was so proud of is implementation-dependant, i.e. a dirty hack. However, I'm confident that glibc can and should be modified to do it for all programs. And it is so worth it. On my test machine, threading alone goes from 2s boot-time coldplug to 1.3-ish. MADV_DONTFORK takes it down to 0.7-ish. The hack is contained in the last patch, "when forking a program, only copy the stack of the _current_ thread". Thanks for your time and encouragement Alan udevd: don't use alarm() for timeouts Build udevd with pthreads Protect selinux context against concurrent modification Add close-on-exec wrappers for open(), fopen(), pipe() and socket() Convert udevd and libudev to use close-on-exec wrapper functions Add abstraction layer for udev event tasks Run udev event tasks in threads udevd: when forking a program, only copy the stack of the _current_ thread configure.ac | 15 ++ extras/ata_id/Makefile.am | 3 +- extras/cdrom_id/Makefile.am | 3 +- extras/collect/Makefile.am | 3 +- extras/edd_id/Makefile.am | 3 +- extras/floppy/Makefile.am | 1 + extras/fstab_import/Makefile.am | 3 +- extras/scsi_id/Makefile.am | 3 +- extras/usb_id/Makefile.am | 3 +- m4/acx_pthread.m4 | 280 ++++++++++++++++++++++++++++++ udev/Makefile.am | 8 + udev/lib/Makefile.am | 1 + udev/lib/libudev-cloexec.c | 226 ++++++++++++++++++++++++ udev/lib/libudev-ctrl.c | 2 +- udev/lib/libudev-device-db-write.c | 2 +- udev/lib/libudev-device.c | 6 +- udev/lib/libudev-monitor.c | 4 +- udev/lib/libudev-private.h | 13 ++ udev/lib/libudev-queue.c | 2 +- udev/lib/libudev-sysdeps.h | 96 ++++++++++ udev/lib/libudev.c | 18 ++- udev/test-udev.c | 7 - udev/udev-event.c | 335 +++++++++++++++++++++++++++++++++++- udev/udev-node.c | 2 +- udev/udev-rules.c | 53 +++--- udev/udev-selinux.c | 9 +- udev/udev-task.c | 295 +++++++++++++++++++++++++++++++ udev/udev-util.c | 211 ----------------------- udev/udev.h | 23 +++- udev/udevd.c | 323 ++++++++++++++++++----------------- 30 files changed, 1527 insertions(+), 426 deletions(-) create mode 100644 m4/acx_pthread.m4 create mode 100644 udev/lib/libudev-cloexec.c create mode 100644 udev/lib/libudev-sysdeps.h create mode 100644 udev/udev-task.c -- To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html