首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于libxml2而导致的librsvg崩溃?

由于libxml2而导致的librsvg崩溃?
EN

Stack Overflow用户
提问于 2013-03-05 11:37:26
回答 2查看 200关注 0票数 0

我希望支持将SVG图像渲染为位图,我正在使用librsvg。到目前为止,它工作得很好,并使用Cairo绘制,万岁!然而,我遇到了一个问题:

我们有一个类似于Windows资源管理器的控件,例如,它在目录中创建文件的缩略图大小的图像,因此该产品将扩展为生成SVG的缩略图。

它使用后台线程来生成缩略图,因此UI在工作时不会被冻结。代码已经在生产中存在了很长一段时间,所以就并发问题而言,没有问题。但是,当从主线程以外的线程调用rsvg_handle_new()时,似乎发生了访问冲突,而实际上这不是我使用librsvg时的问题。

查看堆栈跟踪,崩溃似乎发生在xmlSetGlobalState()的libxml2 (这是librsvg的依赖项)中,问题似乎与这里报告的libxml2 crash on second use on Windows相同,似乎没有解决方案。如果可能的话,我会将这个库的使用量限制在主线程上,但是我被这个现有的架构所困,这个架构会在主线程上生成缩略图。

我发现了http://www.xmlsoft.org/threads.html,它建议首先在主线程中调用xmlInitParser(),这似乎是在RsvgHandle创建期间(我想)由librsvg调用的。

所以我不确定这到底是libxml2的问题,是librsvg使用libxml2的方式的问题,还是我尝试使用librsvg的方式的问题?

有没有libxml2或librsvg专家?

EN

回答 2

Stack Overflow用户

发布于 2014-05-17 22:33:05

尽管在C< 11中malloc()和free()或其他内存处理实现不一定是线程安全的,但总是存在共享/全局内存的问题。同一文件在不同线程中的句柄并不是那么糟糕,只要它们是只读的。

但是,从API2.4.7开始,您可以在libxml2级别为每个文档启用线程安全:http://www.xmlsoft.org/threads.html

当我查看libxml2 2.9.1的源代码时,我确信线程安全是完全实现的,尽管有全局互斥锁,但还有一个原子分配函数。

下载:ftp://xmlsoft.org/libxml2

问候你,Rabi

票数 2
EN

Stack Overflow用户

发布于 2013-03-06 14:14:13

确保在您的代码中或任何其他使用libxml2的库中都不会调用xmlCleanupParser(),因为它会破坏全局状态,因为它假定整个程序中没有解析器的剩余使用。

http://xmlsoft.org/html/libxml-parser.html#xmlCleanupParser

丹尼尔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15215383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档