тупик или блок xlib / xcb - PullRequest
       55

тупик или блок xlib / xcb

1 голос
/ 11 октября 2010

У меня есть программа, разработанная с использованием xlib и cairo.Просто для справки я делаю смешанные вызовы между cairo и xlib, хотя я не уверен, может ли это быть причиной ошибки.В некоторых ситуациях я захожу в тупик или блокирую.У меня есть три темы, которые работают с xlib.Один из них является основным потоком пользовательского интерфейса, который выполняет вызовы как xlib, так и cairo, другой использует его просто для отправки XClientMessage, а третий - для некоторых вызовов xlib, таких как XCopyArea, и в конце отправляет XClientMessage (это для некоторых анимаций).Я вызвал InitThreads в начале программы.Я также охранял все вызовы xlib с помощью XLockDisplay (вызовы cairo также охраняются с помощью XLockDisplay).Я использую Ubuntu 10.10.Следы стека:

(gdb), поток 1
0 в __kernel_vsyscall ()
1 в опросе () из /lib/tls/i686/cmov/libc.so.6
2 дюйма() из /usr/lib/libxcb.so.1
3 в ??() из /usr/lib/libxcb.so.1
4 в xcb_writev () из /usr/lib/libxcb.so.1
5 в _XSend () из /usr/lib/libX11.so.6
6 в _XEventsQueued () из /usr/lib/libX11.so.6
7 в XPending () из /usr/lib/libX11.so.6
(gdb), поток 6
0 в __kernel_vsyscall ()
1 в __lll_lock_wait () из
/lib/tls/i686/cmov/libpthread.so.0
2 в _L_lock_752 () из / lib / tls / i686 / cmov / libpthread.so.0
3 в pthread_mutex_lock () из /lib/tls/i686/cmov/libpthread.so.0
4 в ??() из /usr/lib/libX11.so.6
5 в XLockDisplay () из /usr/lib/libX11.so.6
(gdb) потока 7
0 в __kernel_vsyscall ()
1 в __lll_lock_wait () из /lib/tls/i686/cmov/libpthread.so.0
2 в _L_lock_752 () из /lib/tls/i686/cmov/libpthread.so.0
3 в pthread_mutex_lock() из /lib/tls/i686/cmov/libpthread.so.0
4 в ??() из /usr/lib/libX11.so.6
5 в XLockDisplay () из /usr/lib/libX11.so.6
Где поток 1 является основным потоком пользовательского интерфейса, который в данный момент вызывает XPending (он имеетуже называемый XLockDisplay) в цикле событий, thead 7 - это поток, который просто отправляет XClientMessage, а поток 6 - это поток, который сделал некоторые вызовы XCopyArea и теперь собирается сделать вызов XSendMessage (он ожидает вместе с потоком 7 длярезьба 1 до конца).Но поток 1 никогда не возвращается из опроса.Я не уверен, что это актуально (я ни в коем случае не эксперт по linux или libc), но у меня есть другой поток, ожидающий в опросе (это поток для связи по сети TCP / IP) (gdb) поток 2
0 в __kernel_vsyscall ()
1 в опросе () из /lib/tls/i686/cmov/libc.so.6
Кто-нибудь испытывал подобные тупики / блокировки?Может ли это быть ошибкой в ​​xcb и стоит ли пытаться скомпилировать xlib без xcb?Спасибо

1 Ответ

0 голосов
/ 04 мая 2011

Я только что столкнулся с проблемой, у которой 1 в __lll_lock_wait () также был источником проблем.Это было в части ввода / вывода моего кода, возможно, ваша проблема там?

...