Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析

一、出问题的场景

1、Sensorservice线程正在处理compass sensor事件的过程中。检查了一次buffer的指针的有效性,并在稍后会传递到AKM获取数据的函数接口中使用

2、Sensorservice线程所在进程的负责跨进程通信的Binder线程在sensorservice线程检查buffer指针之后没有真正使用之前,

收到了disable compass sensor的请求,从log中能够看到compass  sensor先是被disable。disable的同一时候会free上面sensorservice检查过并正在使用的buffer指针。同一时候置空buffer指针

3、紧接着sensorservice线程继续运行AKM获取数据的函数接口,并使用到了已经被disable置空的buffer指针,然后产生异常

二、详细log和代码

Disable compass sensor并free buffer的代码:

Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析

Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析

Free buffer 3ms之后sensorservice立即由于訪问空指针异常的log:

Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="554" height="73" alt="" />

传递buffer指针并使用的代码:

Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析

使用buffer指针产生异常的地方log:

Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="554" height="305" alt="" />

上一篇:前端阶段_html部分2后台frame的初始构架案例


下一篇:执行Go程序的三种方式及Go语言关键字