我在我的应用程序的logcat输出中看到了很多以下错误消息:
E/RenderScript: rsAssert failed: mSysRefCount > 0, in frameworks/rs/rsObjectBase.cpp at 147
尽管如此,应用程序确实可以正常工作,但有时候在启动RenderScript代码几次后它会因SIGSEGV而崩溃。
我能够追踪问题(好吧,我认为)。我在我的renderscript代码中有一个返回rs_allocation
的函数,并且在某种程度上定义并使用了这样的函数:
rs_allocation gTmp1;
rs_allocation gTmp2;
static rs_allocation blur(float size) {
if (some_criterion())
return gTmp1;
else
return gTmp2;
}
...
rs_allocation tmp = blur(size);
将功能定义更改为以下后,错误消息消失,应用程序未崩溃,因为:
static bool blur(float size) {
if (some_criterion())
return false;
else
return true;
}
...
bool blurred = blur(size);
rs_allocation tmp = blurred ? gTmp2 : gTmp1;
现在问题是,为什么这有什么不同?毕竟rs_allocation
被定义为rs_types.rsh中的int
指针。因此,当函数返回rs_allocation
时,不应该发生太多奇特,对吗?