Наблюдалось в версии kdebase-kcontrol-3.5.10-alt4 При запуске kcmshell mouse или, что тоже самое, в Центре управления КДЕ запустить пункт "Периферия" - "Мышь", мы видим фатальный сбой в КДЕ (сигнал 11) [kipruss@localhost ~]$ kcmshell mouse KCrash: Application 'kcmshell' crashing...
Вывод от gdb там есть какой-нибудь? А то у меня не падает.
(In reply to comment #1) > Вывод от gdb там есть какой-нибудь? А то у меня не падает. > Я это в виртуалке увидел, а там gdb не установлено. А на хосте у меня alt1 и пока что-то обновляться боюсь. :) Сегодня не успею, а в понедельник или, может, в выходные, если получится, я выдам что говорит gdb. В strace ничего интересного не увидел. И, возможно, не падает из за версии. Падает именно версия alt4
Причина скорее всего где-то в другом месте. В X-ах, например
Created attachment 2962 [details] Логи падения kcmshell Прикладываю лог вывода gdm из виртуалбокса. Хост я обновил только что - не обнаружил ошибки. Возможно, это из-за виртуалбокса или ещё из-за чего-нибудь.
Понижаю багу в звании.
100 пудов, связано с новой libusb, но бага скорее всего в kde
Саш! Судя по тому, что kde зависит от libusb-0.1.so.4, а в трейсе libusb-1.0.so.0, то это наверняка libusb-0.1.so.4 виноват?
Скорее всего проблема в KDE в коде, который перебирает USB устройства. Смотри место, где вызывается usb_open() -- наверняка там нет проверки, что usb_open() вернул NULL. В http://websvn.kde.org/trunk/KDE/kdebase/workspace/kcontrol/input/ я вижу нормальную обработку usb_open() в logitechmouse.cpp. Есть ли еще места в KDE, где используется libusb?
Да, usb_open только там. А usb_close(NULL) не падает?
(In reply to comment #8) > Есть ли еще места в KDE, где используется libusb? apt-cache whatdepends libusb-0.1.so.4 ничего не находит, кроме аналогичного в KDE4 KDE-шный просмотр устройств парсит /sys/bys/usb/devices
API_EXPORTED int usb_close(usb_dev_handle *dev) { usbi_dbg(""); libusb_close(dev->handle); free(dev); return 0; } Как видишь, крайне легко падает. Предлагаю вставить везде в KDE проверку на NULL при usb_close(), в частности, в KDE/kdebase/workspace/kcontrol/input/logitechmouse.cpp: 111 : LogitechMouse::~LogitechMouse() 112 : { 113 : usb_close( m_usbDeviceHandle ); 114 : } Конечно, можно будет и в libusb-compat этот кусок кода поправить, но тогда такие ошибки будут скрываться. В libsub 1.0 они снова вылезут, потому что там предполагается, что за целостностью указателей должна следить вызывающая программа (и это правильно).
(In reply to comment #11) > вставить везде в KDE проверку на NULL при usb_close() ok [...] > предполагается, что за целостностью указателей должна следить вызывающая > программа (и это правильно). IMHO если на производительность не влияет, то зря
Решил добавить небольшой патч, который предотвращает падение при usb_close(NULL) в libusb. Это должно помочь KDE и прочим, но сам по себе факт некорректной работы с нераспределенными структурами является поводом переписать код приложения.
2 kipruss: А какая мышь, кстати?
(In reply to comment #14) > 2 kipruss: > А какая мышь, кстати? > Мышь - PS/2 A4Tech, 2X Quick Mouse Model: OP-3D
Проверьте с kdebase-3.5.10 > alt4 или libusb-0.9.3 > alt0 В них одинаковая проверка добавлена.
(In reply to comment #16) > Проверьте с kdebase-3.5.10 > alt4 или libusb-0.9.3 > alt0 > В них одинаковая проверка добавлена. > [kipruss@localhost ~]$ rpm -q kdebase-kcontrol kdebase-kcontrol-3.5.10-alt6 [kipruss@localhost ~]$ rpm -q libusb libusb-0.9.3-alt3.0 [kipruss@localhost ~]$ kcmshell mouse KCrash: Application 'kcmshell' crashing...
Не могу воспроизвести. Что дает strace -e trace -o log.txt kcmshell mouse ? Приложите сюда log.txt. У меня ожидаемая последовательность при работе с USB шиной (мыши на шине нет, только сканер отпечатков): open("/dev/bus/usb", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 12 stat64("/sys/bus/usb/devices", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0 open("/sys/bus/usb/devices", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 12 stat64("/sys/bus/usb/devices/usb1/descriptors", {st_mode=S_IFREG|0444, st_size=65553, ...}) = 0 open("/sys/bus/usb/devices/usb1/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb1/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb1/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 12 open("/sys/bus/usb/devices/usb1/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb1/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb1/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb2/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb3/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb4/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb5/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb6/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/usb7/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/busnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/devnum", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/descriptors", O_RDONLY) = 13 open("/sys/bus/usb/devices/1-2/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/001/003", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb1/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/001/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb2/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/002/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb3/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/003/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb4/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/004/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb5/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/005/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb6/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/006/001", O_RDONLY) = -1 EACCES (Permission denied) open("/sys/bus/usb/devices/usb7/descriptors", O_RDONLY) = 12 open("/dev/bus/usb/007/001", O_RDONLY) = -1 EACCES (Permission denied)
Created attachment 2971 [details] лог strace [kipruss@localhost ~]$ strace -e trace -o log1.txt kcmshell mouse strace: invalid system call `trace' лог вызова $ strace -o log1.txt kcmshell mouse прилагается Ещё раз напоминаю, что ошибка воспроизводится на ОС внутри Virtualbox OSE. А там usb нет в принципе.