2016-01-12 10 views
8

Mam dość skomplikowany GUI napisany przez Pythona tkinter działający na Linuksie, a jeden z komponentów (który ma często aktualizowany widget Tekst) powoduje rzadkie awarie GUI (raz dziennie).BadIDChoice RENDER w pythonie 3.3 i tk/tcl wyświetlane na X

Guis są wyświetlane na X działa na Mac OSX do X11 i Gnome 2.28.2 z tym samym zachowaniem. Moja wersja python to 3.3, a wersja tt/tcl to 8.5. Błąd pojawia się:

X Error of failed request: BadIDChoice (invalid resource ID chosen for this connection) 
    Major opcode of failed request: 148 (RENDER) 
    Minor opcode of failed request: 4 (RenderCreatePicture) 
    Resource id in failed request: 0x116517f 
    Serial number of failed request: 15106831 
    Current serial number in output stream: 15106872 

strace wygląda następująco:

11:03:29.632041 recvfrom(13, 0x3bae1d4, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 
11:03:29.632059 recvfrom(13, 0x3bae1d4, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 
11:03:29.632147 poll([{fd=13, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=13, revents=POLLOUT}]) 
11:03:29.632164 writev(13, [{"\224\4\5\0D\304\361\0\17\274\361\0i\4\0\0\0\0\0\0\224\27\n\0\3\f\340\0\301\v\340\0"..., 5032}, {NULL, 0}, {"", 0}], 3) = 5032 
11:03:29.632193 poll([{fd=13, events=POLLIN}], 1, -1) = 1 ([{fd=13, revents=POLLIN}]) 
11:03:29.637040 recvfrom(13, "\0\16\302\276x\304\361\0\4\0\224\0\1\0\0\0`\16\330\3\1\0\0\0\243\304\342\210\377\177\0\0"..., 4096, 0, NULL, NULL) = 136 
11:03:29.637135 open("/usr/share/X11/XErrorDB", O_RDONLY) = 35 
11:03:29.637217 fstat(35, {st_mode=S_IFREG|0644, st_size=41532, ...}) = 0 
11:03:29.637360 read(35, "!\n! Copyright 1993, 1995, 1998 "..., 41532) = 41532 
11:03:29.637387 close(35)    = 0 
11:03:29.637820 write(2, "X Error of failed request: BadI"..., 91) = 91 
... 

Moje GUI jest jednowątkowym (i korzysta z połączenia after() monitorowania gniazd I/O).

Czy ktoś wie, co może być nie tak? Czy jest jakieś lepsze debugowanie, które mógłbym wykonać, aby dowiedzieć się, co oznacza część X Error?

+0

ile danych trafia do widżetu tekstowego? czy rośnie bez ograniczeń, czy usuwa stare dane i zastępuje je nowymi? Czy korzystasz z wielu tagów? –

+0

@BryanOakley Dane/dane wizualne ciągle się zmieniają, ale ogranicza się to tylko do wartości ekranu. Ciągle nazywam 'textwin.delete (1.0, END); textwin.insert (END, text) '. Na pewno mocno wykorzystuję tagi. Czy jest być może lepszy sposób/inny sposób powinienem spróbować sprawdzić, czy mam takie samo zachowanie? – gnr

+0

Właśnie potwierdzałem, czy nadal usuwasz i wstawiasz, zamiast tylko nieskończonych wstawek. Wygląda na to, że prawdopodobnie robisz to dobrze. –

Odpowiedz

2

Nieczęste awarii (raz na dobę) z następujących dzienników ...

X Error of failed request: BadIDChoice (invalid resource ID chosen for this connection) 
    Major opcode of failed request: 148 (RENDER) 
    Minor opcode of failed request: 4 (RenderCreatePicture) 

... wydaje się być wskaźnik podpis znanego problemu w ciągu xcb jak mentioned w wątku:

Bug 458092 - Crashes with BadIdChoice X errors

plaster do nich jest dostępna here.
Na podstawie historii git, ten błąd xcb powinien zostać naprawiony w libX11-1.1.99.2 i nowszych (~ 8 lat temu).


Więcej informacji tutaj: email-thread with the complete discussion.

+0

dziękuję za bardzo pomocną odpowiedź - jednak używam wersji 1.9.1 biblioteki libxcb, która, jak sądzę, ma tę poprawkę. – gnr

Powiązane problemy