• Jetson JetPack-5.1.2-L4T-R35.4.1 修复libvargus内存损坏问题


    1. 前言说明

    我们在JetPack 5.1的camera pipeline上遇到了一些问题。

    正常运行了很长一段时间(多天),但它会突然得到以下错误。

    log如下:

    1. Oct 05 07:13:25 camera process[1032]: Module_id 30 Severity 2 : (fusa) Error: InvalidState Invalid Status index in:/capture/src/fusaViHandler.cpp 705
    2. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 600)
    3. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/common/Utils.cpp, function workerThread(), line 114)
    4. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Worker thread ViCsiHw frameComplete failed (in src/common/Utils.cpp, function workerThread(), line 133)
    5. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 600)
    6. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/common/Utils.cpp, function workerThread(), line 114)
    7. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Worker thread ViCsiHw frameComplete failed (in src/common/Utils.cpp, function workerThread(), line 133)
    8. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Timeout waiting on frame start sensor guid 3, capture sequence ID = -570929408 (in src/services/capture/FusaCaptureViCsiHw.cpp, funct>
    9. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/common/Utils.cpp, function workerThread(), line 114)
    10. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Worker thread ViCsiHw frameStart failed (in src/common/Utils.cpp, function workerThread(), line 133)
    11. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Timeout waiting on frame start sensor guid 0, capture sequence ID = -570928384 (in src/services/capture/FusaCaptureViCsiHw.cpp, funct>
    12. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/common/Utils.cpp, function workerThread(), line 114)
    13. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Worker thread ViCsiHw frameStart failed (in src/common/Utils.cpp, function workerThread(), line 133)
    14. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Timeout waiting on frame start sensor guid 2, capture sequence ID = -570928896 (in src/services/capture/FusaCaptureViCsiHw.cpp, funct>
    15. Oct 05 07:13:25 camera process[1032]: double free or corruption (out)
    16. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 600)
    17. Oct 05 07:13:25 camera process[1032]: Module_id 30 Severity 2 : (fusa) Error: InvalidState Invalid Status index in:/capture/src/fusaViHandler.cpp 705
    18. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Timeout waiting on frame start sensor guid 1, capture sequence ID = -570928640 (in src/services/capture/FusaCaptureViCsiHw.cpp, funct>
    19. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/common/Utils.cpp, function workerThread(), line 114)
    20. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Worker thread ViCsiHw frameStart failed (in src/common/Utils.cpp, function workerThread(), line 133)
    21. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/common/Utils.cpp, function workerThread(), line 114)
    22. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Worker thread ViCsiHw frameComplete failed (in src/common/Utils.cpp, function workerThread(), line 133)
    23. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: (propagating from src/common/Utils.cpp, function workerThread(), line 114)
    24. Oct 05 07:13:25 camera process[1032]: SCF: Error InvalidState: Worker thread ViCsiHw frameStart failed (in src/common/Utils.cpp, function workerThread(), line 133)

    我用AddressSanitizer构建了我们的软件,得到了以下错误。

    这可能与libvargus .so中的内存损坏有关。

    调试信息如下:

    1. =================================================================
    2. ==19750==ERROR: AddressSanitizer: negative-size-param: (size=-6)
    3. #0 0xffffb5994f93 in memmove (/lib/aarch64-linux-gnu/libasan.so.4+0x75f93)
    4. #1 0xaaaad8c03a2b in std::char_traits<char>::move(char*, char const*, unsigned long) /usr/aarch64-linux-gnu/include/c++/7/bits/char_traits.h:342
    5. #2 0xaaaad8c0c703 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_move(char*, char const*, unsigned long) /usr/aarch64-linux-gnu/include/c++/7/bits/basic_string.h:349
    6. #3 0xaaaad8c09adb in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) /usr/aarch64-linux-gnu/include/c++/7/bits/basic_string.tcc:438
    7. #4 0xffff2a935d8f (/usr/lib/aarch64-linux-gnu/tegra/libnvargus.so+0x7ad8f)
    8. #5 0xffff2a961697 (/usr/lib/aarch64-linux-gnu/tegra/libnvargus.so+0xa6697)
    9. #6 0xffff2a96317f (/usr/lib/aarch64-linux-gnu/tegra/libnvargus.so+0xa817f)
    10. #7 0xffff2a9486cb (/usr/lib/aarch64-linux-gnu/tegra/libnvargus.so+0x8d6cb)
    11. #8 0xffff2a282f17 (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0x145f17)
    12. #9 0xffff2a2833cb (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0x1463cb)
    13. #10 0xffff2a2838cf (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0x1468cf)
    14. #11 0xffff2a1acd5b (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0x6fd5b)
    15. #12 0xffff2a1d744f (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0x9a44f)
    16. #13 0xffff2a1eef2b (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0xb1f2b)
    17. #14 0xffff2a1bddff (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0x80dff)
    18. #15 0xffff2a1bdf8b (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0x80f8b)
    19. #16 0xffff2a1bc9b7 (/usr/lib/aarch64-linux-gnu/tegra/libnvscf.so+0x7f9b7)
    20. #17 0xffffb249b113 (/usr/lib/aarch64-linux-gnu/tegra/libnvos.so+0x9113)
    21. #18 0xffffb58f5623 in start_thread (/lib/aarch64-linux-gnu/libpthread.so.0+0x7623)
    22. #19 0xffffb520d49b (/lib/aarch64-linux-gnu/libc.so.6+0xd149b)
    23. 0xfffeb533080b is located 27 bytes inside of 31-byte region [0xfffeb53307f0,0xfffeb533080f)
    24. allocated by thread T47 here:
    25. #0 0xffffb59f22eb in operator new(unsigned long) (/lib/aarch64-linux-gnu/libasan.so.4+0xd32eb)
    26. #1 0xaaaad8c0ca5f in __gnu_cxx::new_allocator<char>::allocate(unsigned long, void const*) /usr/aarch64-linux-gnu/include/c++/7/ext/new_allocator.h:111
    27. #2 0xaaaad8c09f33 in std::allocator_traits<std::allocator<char> >::allocate(std::allocator<char>&, unsigned long) /usr/aarch64-linux-gnu/include/c++/7/bits/alloc_traits.h:436
    28. #3 0xaaaad8c0b4cb in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long) /usr/aarch64-linux-gnu/include/c++/7/bits/basic_string.tcc:153
    29. #4 0xaaaad8c0c84f in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) /usr/aarch64-linux-gnu/include/c++/7/bits/basic_string.tcc:317
    30. #5 0xaaaad8c09c6b in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) /usr/aarch64-linux-gnu/include/c++/7/bits/basic_string.tcc:466
    31. #6 0xffff2a935d8f (/usr/lib/aarch64-linux-gnu/tegra/libnvargus.so+0x7ad8f)
    32. #7 0xffffb520d49b (/lib/aarch64-linux-gnu/libc.so.6+0xd149b)
    33. Thread T47 created by T39 (argus_thread) here:
    34. #0 0xffffb5958857 in __interceptor_pthread_create (/lib/aarch64-linux-gnu/libasan.so.4+0x39857)
    35. #1 0xffffb249b3ff (/usr/lib/aarch64-linux-gnu/tegra/libnvos.so+0x93ff)
    36. #2 0xffff6664e4db in argus_thread /home/user/src/nvidia-gstreamer/src/gstarguscamerasrc/gstarguscamerasrc.cpp:977
    37. #3 0xffffb5784483 (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0x7b483)
    38. #4 0xffffb58f5623 in start_thread (/lib/aarch64-linux-gnu/libpthread.so.0+0x7623)
    39. #5 0xffffb520d49b (/lib/aarch64-linux-gnu/libc.so.6+0xd149b)
    40. Thread T39 (argus_thread) created by T37 (arguscamera) here:
    41. #0 0xffffb5958857 in __interceptor_pthread_create (/lib/aarch64-linux-gnu/libasan.so.4+0x39857)
    42. #1 0xffffb57a92e7 (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0xa02e7)
    43. #2 0xffffb57848ef in g_thread_new (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0x7b8ef)
    44. #3 0xffff6664e047 in gst_nv_argus_camera_set_caps /home/user/src/nvidia-gstreamer/src/gstarguscamerasrc/gstarguscamerasrc.cpp:864
    45. #4 0xffffb4ecc71f in gst_base_src_set_caps (/lib/aarch64-linux-gnu/libgstbase-1.0.so.0+0x3f71f)
    46. #5 0xffffb4eccc73 (/lib/aarch64-linux-gnu/libgstbase-1.0.so.0+0x3fc73)
    47. #6 0xffffb4eca5d3 (/lib/aarch64-linux-gnu/libgstbase-1.0.so.0+0x3d5d3)
    48. #7 0xffffb566370f (/lib/aarch64-linux-gnu/libgstreamer-1.0.so.0+0xc870f)
    49. #8 0xffffb5784483 (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0x7b483)
    50. #9 0xffffb58f5623 in start_thread (/lib/aarch64-linux-gnu/libpthread.so.0+0x7623)
    51. #10 0xffffb520d49b (/lib/aarch64-linux-gnu/libc.so.6+0xd149b)
    52. Thread T37 (arguscamera) created by T0 here:
    53. #0 0xffffb5958857 in __interceptor_pthread_create (/lib/aarch64-linux-gnu/libasan.so.4+0x39857)
    54. #1 0xffffb57a92e7 (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0xa02e7)
    55. #2 0xffffb5785123 (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0x7c123)
    56. #3 0xffffb5785563 in g_thread_pool_push (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0x7c563)
    57. #4 0xffffb5664777 (/lib/aarch64-linux-gnu/libgstreamer-1.0.so.0+0xc9777)
    58. #5 0xffffb4ecd01b in gst_base_src_start_complete (/lib/aarch64-linux-gnu/libgstbase-1.0.so.0+0x4001b)
    59. #6 0xffffb4ecd34f (/lib/aarch64-linux-gnu/libgstbase-1.0.so.0+0x4034f)
    60. #7 0xffffb4ecd877 (/lib/aarch64-linux-gnu/libgstbase-1.0.so.0+0x40877)
    61. #8 0xffffb5627b2b (/lib/aarch64-linux-gnu/libgstreamer-1.0.so.0+0x8cb2b)
    62. #9 0xffffb5602ddb in gst_element_change_state (/lib/aarch64-linux-gnu/libgstreamer-1.0.so.0+0x67ddb)
    63. SUMMARY: AddressSanitizer: negative-size-param (/lib/aarch64-linux-gnu/libasan.so.4+0x75f93) in memmove
    64. ==19750==ABORTING

    2. 查阅资料

    Nvidia Jetson最近解决了libvargus中的内存损坏问题。

    可以换到最新的Jetpack发布版本,即Jetpack-5.1.2/ l4t-r35.4.1

    同时更新预构建的二进制libvargus.so,用如下附近

    https://download.csdn.net/download/jzwjzw19900922/88557361

    3. 测试

    经过测试,更新版本可解决上述 内存损坏问题

  • 相关阅读:
    【网站架构】10年数据库设计浓缩的绝技,实打实的设计步骤与规范
    【Linux-Minio】安装部署文档(含单节点多盘、多节点多盘【TLS+Nginx负载均衡】、省市代码)
    【Vue项目复习笔记】tabbar的封装
    redis哨兵机制
    PerfView专题 (第十篇):洞察 C# 终结队列引发的内存泄漏
    java编程培训学习的就业前景好不好
    SLAM中旋转向量(旋转轴/旋转角)、旋转矩阵、四元数、李代数的相互转化(附C++ Eigen库代码实例)
    【JAVA】Java 常见的垃圾收集器有哪些?
    QML动画
    [附源码]java毕业设计万科电子商城
  • 原文地址:https://blog.csdn.net/jzwjzw19900922/article/details/134526130