mailru / icqdesktop.deprecated

Other
463 stars 100 forks source link

Постоянно падает #61

Open unera opened 6 years ago

unera commented 6 years ago

Linux, Debian/stretch. ICQ - блоб скачанный с сайта.

причем не Segfault (я попробовал пустить под ulimit -c unlimited), а просто вываливается.

падения наблюдаются следующим образом

  1. запускаем
  2. оставляем работать в неактивном окне
  3. падение происходит при переключении на окно ICQ (причем не потому что там сообщение пришло, а просто потому что захотелось написать кому-то)

в консоли где запускал icq такой лог:

Fontconfig error: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 72: non-double matrix element
Fontconfig error: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 72: non-double matrix element
Fontconfig warning: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 80: saw unknown, expected number
ASSERT: !"unexpected scale value"
Fontconfig error: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 72: non-double matrix element
Fontconfig error: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 72: non-double matrix element
Fontconfig warning: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 80: saw unknown, expected number
ASSERT: QFile::exists(_iconPath)
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile

но этот лог наблюдается и при нормальной работе ICQ

Alex-from-the-90s commented 6 years ago

А какой у вас оконный менеджер? Помню у меня были проблемы с переключением раскладок в чате (я постил об этом здесь в отдельной ветке). Ася, как я понял, IBus не поддерживает, но были трудности и с переключением клавишами, назначенными для XIM. После того, как установил дефолтный оконный менеджер Xfce - Xfwm4 - переключение по XIM стало нормальным, как и везде.

Alex-from-the-90s commented 6 years ago

Кстати, обратил внимание, что с Xfwm4 окно ICQ не центрируется, а сползает вниз по экрану при запуске.

unera commented 6 years ago

А какой у вас оконный менеджер

i3wm

были проблемы с переключением раскладок

падает не знаю как связано с раскладками, но падает так:

  1. включаем icq
  2. уходим на другое окно/рабочий стол
  3. возвращаемся - ok
  4. повторяем пункты 1-2-3 и периодически падает на пункте 3.

возможно вернуться надо с другой раскладкой?

у меня установлен xxkb который отслеживает чтобы у каждого окна была своя раскладка.

Alex-from-the-90s commented 6 years ago

Возможно влияет опция глобального сохранения текущей раскладки для всех окон (у меня она активирована, то есть раскладка везде одинаковая), но с xxkb я не знаком, знаю только IBus и xkb. Уверен точно в том, что у аси сейчас не так хорошо отлажено взаимодействие с методами ввода на Linux. В таких случаях неплохо скачать исходники и посмотреть РИДМИ, возможно для нормального функционирования нужна определенная версия пакета, который в системе или новее, или старее. Еще хороший способ - ldd ./icq в терминале в папке с бинарником. Вывод покажет, все ли в порядке по зависимостям и т. д. Не знаю, какой QT использует ICQ, но если 4-й, то можно еще проверить метод ввода в QT4 Configuration Tool (должен быть тот же xim - так и прописано с маленькой буквы, замен шрифтов у меня там нет).

ghost commented 6 years ago

XUbuntu 16.04.4 LTS оконный менеджер xfce Linux support2 4.4.0-92-generic #115-Ubuntu SMP Thu Aug 10 09:04:33 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux Последняя доступная бинарная версия падает каждые 5 минут с таким же логом как у автора. До этого последние 2 года работал стабильно клиент.

lieff commented 6 years ago

А если так запустить?

prlimit --as=4000000000 catchsegv ./icq

Если напишет "Not enough memory" - то это dbus, и похоже надо обновить статическую либу libdbus-1.a.

ghost commented 6 years ago

prlimit --as=4000000000 catchsegv ./icq

Так запустил, тоже падает, ошибок никаких не выводит, систему обновил, проверил, такой же результат.

lieff commented 6 years ago

Если catchsegv ничего не вывел - скорее всего, это не краш, а какой-нить внутренний паник, который вызвал exit(). Тогда можно попробовать записать strace -f ./icq >log 2>&1 .

ghost commented 6 years ago

strace выдёт Broken Pipe: [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446175504}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446201057}) = 0 [pid 6569] <... select resumed> ) = 0 (Timeout) [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, <unfinished ...> [pid 6569] write(27, "\0", 1 <unfinished ...> [pid 6559] <... clock_gettime resumed> {11, 446252728}) = 0 [pid 6569] <... write resumed> ) = 1 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, <unfinished ...> [pid 6569] select(27, [26], [], NULL, {0, 4000} <unfinished ...> [pid 6559] <... clock_gettime resumed> {11, 446288461}) = 0 [pid 6569] <... select resumed> ) = 1 (in [26], left {0, 3998}) [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, <unfinished ...> [pid 6569] getsockopt(26, SOL_SOCKET, SO_ERROR, <unfinished ...> [pid 6559] <... clock_gettime resumed> {11, 446322391}) = 0 [pid 6569] <... getsockopt resumed> 0x7fac20ff8c78, 0x7fac20ff8c7c) = -1 ENOTSOCK (Socket operation on non-socket) [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, <unfinished ...> [pid 6569] read(26, <unfinished ...> [pid 6559] <... clock_gettime resumed> {11, 446353881}) = 0 [pid 6569] <... read resumed> "\0", 4) = 1 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, <unfinished ...> [pid 6569] select(27, [26], [], NULL, {0, 4000} <unfinished ...> [pid 6559] <... clock_gettime resumed> {11, 446388714}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446420915}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446446829}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446472275}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446497959}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446522501}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446548283}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446574041}) = 0 [pid 6559] clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {11, 446599618}) = 0 [pid 6559] close(51) = 0 [pid 6559] rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 8) = 0 [pid 6559] futex(0x731a18c, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x731a188, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1 [pid 6545] <... futex resumed> ) = 0 [pid 6559] futex(0x7fac1819b7f0, FUTEX_WAIT, 2147483648, NULL <unfinished ...> [pid 6545] futex(0x731a160, FUTEX_WAKE_PRIVATE, 1) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 512981231}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513043488}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513104281}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513164930}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513226287}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513286600}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513349973}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513410285}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513470634}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513531235}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513599612}) = 0 [pid 6545] clock_gettime(CLOCK_MONOTONIC, {2812, 513687742}) = 0 [pid 6545] poll([{fd=25, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=25, revents=POLLIN|POLLRDNORM|POLLERR|POLLHUP}]) [pid 6545] write(25, "\25\3\3\0\32]f$\242o\263\221^\221O$\3445-g\ro\246\t\36\213\23\206\376\363\262", 31) = -1 EPIPE (Broken pipe) [pid 6545] --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=6543, si_uid=1000} --- [pid 6583] +++ killed by SIGPIPE +++ [pid 6582] +++ killed by SIGPIPE +++ ... +++ killed by SIGPIPE +++ В конце пропустил - ещё порядка 20 процессов убиваются [pid ####] +++ killed by SIGPIPE +++

Вот думаю, может какие-то проблемы в сети. Сейчас с последнего запуска работает уже минут 40, поэтому ещё потестирую. Как упадёт, думаю запустить со второго ноута, на нём Linux Mint и xfce.

lieff commented 6 years ago

А что за fd=25 ? Можно полный лог(здесь аттачить можно)? Есть подозрение что это общение с WM.

ghost commented 6 years ago

Да, пожалуйста. icq_log.zip

lieff commented 6 years ago

Это оказалось внезапно общение с сервером:

[pid  6545] socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 25
[pid  6545] setsockopt(25, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid  6545] setsockopt(25, SOL_TCP, TCP_KEEPIDLE, [5], 4 <unfinished ...>
[pid  6545] setsockopt(25, SOL_TCP, TCP_KEEPINTVL, [5], 4 <unfinished ...>
[pid  6545] fcntl(25, F_GETFL <unfinished ...>
[pid  6545] fcntl(25, F_SETFL, O_RDWR|O_NONBLOCK) = 0
[pid  6545] connect(25, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("178.237.20.54")}, 16) = -1 EINPROGRESS (Operation now in progress)
...
[pid  6545] write(25, "\25\3\3\0\32]f$\242o\263\221^\221O$\3445-g\ro\246\t\36\213\23\206\376\363\262", 31) = -1 EPIPE (Broken pipe)

Это довольно распространенная никсовая ошибка, надо или

    signal(SIGPIPE, SIG_IGN);

или читать\писать, прося не генерить сигналы:

    recv(m_s, (char*)p, size, MSG_NOSIGNAL);
    send(m_s, ptr, len, MSG_NOSIGNAL);
ghost commented 6 years ago

Спасибо за объяснение, буду думать, как теперь с этим жить дальше =) Странно, но не вылетает с последнего запуска уже пару часов.

lieff commented 6 years ago

Как раз не странно, это от надежности коннекта с сервером зависит. Если есть возможность пересобрать, думаю будет достаточно на старте приложения сделать:

    signal(SIGPIPE, SIG_IGN);
ghost commented 6 years ago

Да собрать смогу при необходимости, но есть нюанс, что клиент периодически самостоятельно обновляется. И будет-ли исправлена проблема, не известно.

aloneuser commented 6 years ago

У меня та же проблема. ОС Debian 9. Desktop icewm