非常随机的Pango崩溃

时间:2016-12-04 07:07:25

标签: multithreading python-2.7 gtk critical-section pango

正如标题所说,我已经遇到了一些奇怪的崩溃,显然是由Pango或相关人员引起的。

我的程序正常运行,按时完成所有操作,没有任何奇怪的视觉故障或任何其他类型的错误,但这种错误通常导致崩溃。有时它会抛出一个异常并继续,但大约有10%的异常在崩溃中结束,但没有提到我不知道是什么导致它。

以下是一些不同尝试的日志:

最常见的一个:

(App:23224): Pango-CRITICAL **: pango_layout_set_width: assertion 'layout != NULL' failed

(App:23224): Pango-CRITICAL **: pango_layout_get_width: assertion 'layout != NULL' failed

(App:23224): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed

(App:23224): Pango-CRITICAL **: pango_layout_is_wrapped: assertion 'layout != NULL' failed

(App:23224): Pango-CRITICAL **: pango_layout_is_ellipsized: assertion 'layout != NULL' failed
./Def:822: Warning: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
  Gtk.main()

(App:23224): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed

或多或少的常见...

(App:22385): Pango-CRITICAL **: pango_layout_is_wrapped: assertion 'layout != NULL' failed

(App:22385): Pango-CRITICAL **: pango_layout_is_ellipsized: assertion 'layout != NULL' failed
./Def:820: Warning: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
  Gtk.main()

(App:22385): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed

最奇怪的是:

Pango:ERROR:/build/buildd/pango1.0-1.36.3/./pango/pango-layout.c:3916:pango_layout_check_lines: assertion failed: (!layout->log_attrs)

最后一次只见过一次,其余的错误都很常见。

具有讽刺意味的是,最后一个出现在我的应用程序仍处于活动状态达到创纪录时间之后,然后这个错误突然结束了,甚至没有#34;常见的"错误...

任何想法可能会发生什么?

正如我之前所说,我的应用程序应该正常工作,直到上述错误之一结束。

更多信息:

  1. 我的应用程序是多线程的,但这个错误似乎与线程无关......否则其他东西也应该抱怨!

1 个答案:

答案 0 :(得分:1)

嗯,经过长时间的研究,我确实找到了ThisThisThis

所有' em都很有用。第一个是关于同一个主题的另一个SO问题的链接,第二个链接到官方GNOME的开发者网站,我找到了一个关于好奇的信息{ {1}}函数:Gdk,第三个函数链接到前面提到的Gdk函数的错误报告,因为在Python中它要求3个args,当在C中只询问2时,但是它澄清了为什么要求3。

在我发现Gdk.threads_add_idle之后解决这个问题并不困难。

我只需将我的所有调用Gtk移动到函数中,在第二个线程中,使用Gdk.threads_add_idle更改所有调用,其中Gdk.threads_add_idle(priority, function, data)应为priority并{{1必须是包含对Gtk的所有调用的函数。

GLib.PRIORITY_DEFAULT_IDLE它是一个可选参数。它应包含您要传递给function

的所有其他数据