android系统使用appe播放audio资源,相关进程被kill之后appe无法再次打开
Hi,
android系统使用appe播放audio资源,相关进程被kill之后appe无法再次打开,原因是appe资源被占用。
在Ti提供的demo中,通过 signal(SIGKILL, appe_exit); 来解决程序被kill的时候需要做的资源回收处理,即使用appe_close来释放资源。 但是,如果使用kill -9 来结束任务,这个signal是无法被捕捉到的,所以再次执行appe_open会fail,err原因是资源被占用。
我已经对TI的demo做了测试,demo捕捉信号如下:
signal(SIGINT, appe_exit);
signal(SIGTERM, appe_exit);
signal(SIGABRT, appe_exit);
signal(SIGKILL, appe_exit);
signal(SIGHUP, appe_exit);
Ctrl + c 以及 kill均能被捕捉到,但是kill -9 不能被捕捉到。
在android系统中,资源紧张导致server被kill是常见的,由于信号无法捕捉到,再次重入执行appe_open会出现上述错误。
请帮助分析一下!
谢谢!
可能设备驱动对异常关闭的非初始化状态不能识别或控制, 导致出错了.
Hi Airwill,
确实是这样,再一次打开fail返回的原因是 appe_open() failed because APPE port is already occupied with playback,驱动部分没有相关err打印出来。在TI提供的demo中,是通过捕捉signal,然后执行appe_close,但是如果用kill -9,这个信号是捕捉不到的,demo再次打开也会挂死。
因为appe_close的原型是appe_close(struct appe_pcm *pcm),需要参数。 是否有不需要参数也能释放资源的方式?这样可以在每次进程启动的时候,重置appe环境,避开这个问题?
谢谢!