2016-01-12 6 views
8

Ich habe eine ziemlich komplizierte GUI geschrieben durch Python tkinter läuft auf Linux, und eine der Komponenten (die ein Text-Widget, das häufig aktualisiert hat) verursacht die GUI selten abstürzen (einmal am Tag).BadIDChoice RENDER in Python 3.3 und tk/tcl auf X

Die Guis werden auf X angezeigt, das sowohl auf Mac OS X als auch auf Gnome 2.28.2 mit demselben Verhalten läuft. Meine Python-Version ist 3.3 und die tk/tcl-Version ist 8.5. Der Fehler, den ich bekommen ist:

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 

ein strace wie folgt aussieht:

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 
... 

Meine GUI ist Single-Thread (und nutzt die after() Call-Buchsen für I/O zu überwachen).

Weiß jemand, was könnte falsch sein? Gibt es ein besseres Debugging, das ich tun könnte, um herauszufinden, was der X Error Teil bedeutet?

+0

Wie viele Daten werden in das Text-Widget übernommen? wächst es grenzenlos oder löscht man alte Daten und ersetzt sie durch neue? Verwenden Sie viele Tags? –

+0

@BryanOakley die Daten/visuelle Ausgabe ändert sich ständig, aber es ist nur auf einen Bildschirm Wert beschränkt. Ich rufe ständig 'textwin.delete (1.0, END); textwin.insert (ENDE, Text) '. Ich benutze Tags sehr stark. Gibt es vielleicht einen besseren Weg/einen anderen Weg, um zu sehen, ob ich das gleiche Verhalten bekomme? – gnr

+0

Ich habe gerade bestätigt, ob Sie weiterhin löschen und einfügen, im Gegensatz zu nur unendlichen Einfügungen. Es klingt, als ob du es wahrscheinlich richtig machst. –

Antwort

2

Gelegentliche Abstürze (einmal täglich) mit den folgenden Protokolle ...

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) 

... erscheint eine verräterische Signatur eines bekannten Problems innerhalb xcb als mentioned in folgendem Thread zu sein:

Bug 458092 - Crashes with BadIdChoice X errors

Der Patch für sie ist verfügbar here.
Basierend auf der Git-Geschichte, sollte dieser xcb-Fehler in libX11-1.1.99.2 und darüber (vor 8 Jahren) behoben werden.


Für weitere Referenz hier ist die email-thread with the complete discussion.

+0

danke für Ihre sehr hilfreiche Antwort - aber ich benutze libxcb Version 1.9.1, die ich glaube, hat diese Lösung. – gnr

Verwandte Themen