【野fd问题】野fd导致system_server发生crash问题

1、问题描述

不同类型测试均发生system_server native crash问题。

2、问题分析

log如下:

pid: 3421, tid: 3515, name:PowerManagerSer  >>>system_server <<<

signal 6 (SIGABRT), code -6 (SI_TKILL),fault addr --------

Abort message:'BitTube::recvObjects(count=256, size=104), res=18 (partial events werereceived!)'

   rax 0000000000000000  rbx00007d0735ac94f8  rcx00007d074d9bfe97  rdx 0000000000000006

   rsi 0000000000000dbb  rdi0000000000000d5d

   r8  0000000000000030  r9 0000000000000069  r10 0000000000000008  r11 0000000000000202

   r12 0000000000000dbb  r130000000000000006  r140000000000000000  r15 00007d072c28e640

   cs  0000000000000033  ss 000000000000002b

   rip 00007d074d9bfe97  rbp000000000000000b  rsp00007d0735ac7cc8  eflags 0000000000000202

 

backtrace:

   #00 pc 000000000008ee97 /system/lib64/libc.so (tgkill+7)

   #01 pc 000000000008b8b2 /system/lib64/libc.so (pthread_kill+66)

   #02 pc 00000000000302d1 /system/lib64/libc.so (raise+17)

   #03 pc 00000000000286be /system/lib64/libc.so (abort+78)

   #04 pc 0000000000010f4f /system/lib64/libcutils.so (__android_log_assert+287)

   #05 pc 0000000000064008 /system/lib64/libgui.so(_ZN7android7BitTube11recvObjectsERKNS_2spIS0_EEPvmm+264)

   #06 pc 00000000000856c6 /system/lib64/libgui.so(_ZN7android16SensorEventQueue4readEP12ASensorEventm+54)

   #07 pc 00000000001566e7 /system/lib64/libandroid_runtime.so

   #08 pc 0000000000018b06 /system/lib64/libutils.so (_ZN7android6Looper9pollInnerEi+998)

   #09 pc 000000000001865a /system/lib64/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+42)

   #10 pc 0000000000101126 /system/lib64/libandroid_runtime.so(_ZN7android18NativeMessageQueue8pollOnceEP7_JNIEnvP8_jobjecti+38)

   #11 pc 0000000073fc48f8 /data/dalvik-cache/x86_64/system@framework@boot.oat (offset 0x2c0d000)

从调用栈分析是主动abort

168ssize_t BitTube::recvObjects(const sp<BitTube>& tube,

169        void* events, size_tcount, size_t objSize)

170{

171    char* vaddr =reinterpret_cast<char*>(events);

172    ssize_t size = tube->read(vaddr,count*objSize);//size = 18objSize = 104count = 256count*objSize =26k

173

174    // should never happenbecause of SOCK_SEQPACKET

175    LOG_ALWAYS_FATAL_IF((size >= 0)&& (size % static_cast<ssize_t>(objSize)),//--

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在CANFD通信中,由于数据传输速率较快,需要使用缓冲区(Buffer)来缓存发送和接收的数据。CANFD的Buffer问题主要涉及到以下几个方面: 1. Buffer数量问题:CANFD通信需要使用多个缓冲区来缓存发送和接收的数据,缓冲区的数量需要根据实际情况来设计。如果缓冲区数量过少,可能会导致数据丢失或者传输失败;如果缓冲区数量过多,会增加系统的成本和复杂度。 2. Buffer大小问题:CANFD通信需要使用缓冲区来缓存发送和接收的数据,缓冲区的大小需要根据实际数据大小来设计。如果缓冲区大小过小,可能会导致数据截断或者传输失败;如果缓冲区大小过大,会增加系统的成本和复杂度。 3. Buffer读写问题:CANFD通信需要使用缓冲区来缓存发送和接收的数据,需要注意缓冲区的读写顺序。在发送数据时,需要先将数据写入缓冲区,然后再将缓冲区的数据发送出去;在接收数据时,需要先读取缓冲区中的数据,然后再进行处理。 4. Buffer溢出问题:在CANFD通信中,如果缓冲区大小不足或者数据传输速率过快,可能会导致缓冲区溢出。为了避免缓冲区溢出,可以增加缓冲区的数量和大小,或者使用数据丢失和错误校验等机制来处理溢出数据。 需要注意的是,CANFD的Buffer问题需要结合具体的应用场景和要求来设计,并且需要根据实际情况来选择合适的缓冲区数量和大小。同时,需要根据实际情况来设计缓冲区的读写顺序和溢出处理机制,以确保数据传输的可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值