线程堆栈过小导致MFXVideoDECODE_DecodeHeader出现signal 11

最近在freeswitch上做intel qsv的相关功能开发,主要是做一个编解码的功能。结果却在MFXVideoDECODE_DecodeHeader的时候出现的signal 11的崩溃。一直以为是因为freeswitch开发才导致的,因为之前做的另一个程序,并不基于freeswitch的开发并未有任何的异常。

最后发现是因为解码的时候,我实现上是会去起一个线程来做解码的,而之前的程序是基于系统默认的pthread调用,并没有设置多余的参数。而freeswitch这边是有设置堆栈空间大小的。所以就做了以下这个小代码程序 http://elkpi.com/code-snippets/dec_hdr.zip 代码的参数也很简单,默认是1024*16的堆栈空间设置,当然取决于对h264文件的解码上的处理。结果是会崩溃的,当堆栈空间达到1024000则不会有异常。我也在intel的论坛上发了帖子

使用默认1024*16的堆栈空间大小,出现崩溃:

而修改为1024000后,正常运行:

最后,我处理是不调用pthread_attr_setstacksize去固定堆栈的空间大小,而由系统自己去处理。虽然这样解决了问题,而由于intel的libmfxhw64.so是不开源的,并不清楚其内部是如何一个实现的方式。当然,毕竟是做h264的编解码操作,对于内存的需求比较大,也是在情理之中吧。在这里记录一下这件事情,因为之前并不是很在意这个堆栈的设置。

转载请注明: 转载自elkPi.com

本文链接地址: 线程堆栈过小导致MFXVideoDECODE_DecodeHeader出现signal 11

发表评论

电子邮件地址不会被公开。 必填项已用*标注