python 3.3中的BadIDChoice RENDER和X上显示的tk/tcl

gnr*_*gnr 8 linux x11 tk-toolkit tkinter python-3.x

我有一个相当复杂的GUI,通过tkinter在Linux 上运行的python编写,其中一个组件(具有经常更新的Text小部件)导致GUI不经常崩溃(每天一次).

guis正在通过X11和Gnome 2.28.2在Mac OSX上运行,并且具有相同的行为.我的python版本是3.3,tk/tcl版本是8.5.我得到的错误是:

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
Run Code Online (Sandbox Code Playgroud)

一个strace样子:

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
...
Run Code Online (Sandbox Code Playgroud)

我的GUI是单线程的(并使用after()调用来监视I/O的套接字).

有谁知道什么可能是错的?有没有更好的调试,我可以做出来找出该X Error部分的含义?

The*_*ist 2

偶尔发生崩溃(每天一次),日志如下......

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)
Run Code Online (Sandbox Code Playgroud)

...似乎是以下线程中 xcb提到的已知问题的明显特征:

Bug 458092 - 因 BadIdChoice X 错误而崩溃

它的补丁可以在这里找到。
根据 git 历史记录,这个 xcb bug 应该在libX11-1.1.99.28 年前及以上版本得到修复。


如需进一步参考,请参阅包含完整讨论的电子邮件线程