Android5.0L中SensorService crash导致的systemserver重启问题分析
来源:互联网 发布:steam游戏mac 编辑:程序博客网 时间:2024/05/04 23:56
一、初步分析结论
sensorservice多线程机制存在问题,导致在disable accel sensor并释放相应内存和数据之后,
有很小的概率发生继续读取到未处理完的sensor事件,从而继续使用相应的内存和数据,
并且没有做相应的防御保护措施,最终引起指针地址操作错误。
二、解决方案
1、首先在可能发生错误的地方做好防御保护措施
2、对多线程进行同步,对于临界变量的操作都放置到临界区中,使用锁来保护。
三、具体分析过程
log中显示打出accel sensor被disable的信息,然后接着1ms sensorservice就crash。
Disable accel sensor会先注销listener并释放相应内存,然后再调用具体的sensor的hal去disable,具体代码如下:
注销listener时会释放内存和数据:
真正发生地址操作失败的代码并没有进行相应的判空保护,如果781行得到的是0,那么783的item也是0,它的成员ctx相对偏移是8,在对8进行寻址和成员操作时就出现了内存错误,因为8不是一个有效的数据对象地址,具体如下:
1 0
- Android5.0L中SensorService crash导致的systemserver重启问题分析
- Android5.0L下因sensorservice crash导致systemserver重启的另外一种场景分析
- Android5.0L因SystemUI ANR导致的黑屏问题分析
- Android5.0L退出APP横竖屏切换导致的触摸屏输入(Touch Event)无效(冻屏)问题分析(Key Event仍然有效)
- Android M原生BUG,手机使用过程中SystemServer空指针异常导致手机重启
- Android5 Zygote 与 SystemServer 启动流程分析
- JNI引用溢出导致的重启问题分析
- RapidXML 导致的 crash 问题
- ZygoteInit中启动的SystemServer分析
- Android5.1 Framework分析----如何在SystemServer中添加系统服务
- SensorService 分析
- 关于CALayer导致的crash问题
- 关于CALayer导致的crash问题
- VirtualProtect导致程序crash的问题。
- unbindService()导致应用Crash的问题
- Android 7.0 广播导致的crash问题
- c中字符串数组导致的crash
- Android5.1--SystemServer进程
- 基于google.zxing的二维码java 代码
- LeetCode-Binary Search Tree Iterator-解题报告
- android查看网络图片
- DetachedCriteria 如何count数据
- 设计模式之工厂模式(Factory Method)
- Android5.0L中SensorService crash导致的systemserver重启问题分析
- 解决viewpager嵌套scrowllview或者viewpager嵌套viewpager的问题
- 项目资料整理
- error C2440: ’static_cast’ : cannot convert from ‘UINT (__thiscall CStaticLink::* )(CPoint)’ to ‘LRE
- 记住密码
- 为什么手机垃圾就是治不了?
- 如何让手机横竖屏切换不重走Activity生命周期
- qt初次使用
- 通俗易懂的 C#反射