From: Hans de G. <hde...@re...> - 2013-09-04 19:26:10
|
Hi, As discussed in much detail here: https://bugzilla.redhat.com/show_bug.cgi?id=1003193 Calling libusb_exit from atexit from libusb-compat-0.1.5 causes some apps to break. The app in question is the scanimage app from sane-backends, which uses atexit for cleanup itself. So what happens is the libusb-compat atexit handler runs first, and then the scanimage atexit cleanup code runs, and tries to cleanly shutdown the scanner (which may require communicating to it). This results in logs with LIBUSB_DEBUG=4 like this: [ 9.641307] [00006300] libusbx: debug [libusb_exit] [ 9.641312] [00006300] libusbx: debug [libusb_exit] destroying default context [ 9.641317] [00006300] libusbx: warning [libusb_exit] application left some devices open libusbx: warning [add_to_flying_list] failed to arm first timerfd (errno 9) libusbx: warning [add_to_flying_list] failed to arm first timerfd (errno 9) libusbx: warning [add_to_flying_list] failed to arm first timerfd (errno 9) libusbx: warning [libusb_close] internal signalling write failed, closing anyway scanimage: received signal 2 scanimage: trying to stop scanner libusbx: warning [add_to_flying_list] failed to arm first timerfd (errno 9) libusbx: warning [add_to_flying_list] failed to arm first timerfd (errno 9) libusbx: warning [add_to_flying_list] failed to arm first timerfd (errno 9) scanimage: received signal 2 scanimage: aborting Note that errno 9 is EBADFD, which is caused by the fd already being closed by libusb_exit. I consider this behavior with some old apps a way bigger problem then the memory / resource leak we had before, therefor I suggest reverting the atexit changes to libusb-compat. Regards, Hans |