[Ovmsdev] Random crash if enable notifications

Michael Balzer dexter at expeedo.de
Sat Jun 6 03:42:15 HKT 2020


See previous posts on this, you also need the fixed toolchain: https://github.com/espressif/esp-idf/issues/2892#issuecomment-501106283

Regards,
Michael


Am 05.06.20 um 20:04 schrieb Tamás Kovács:
> i think i don't run spiram fix. How can i use it. I must check out branch "spiram-fix-test"  to run spiram fix?
>
> Michael Balzer <dexter at expeedo.de <mailto:dexter at expeedo.de>> ezt írta (időpont: 2020. jún. 5., P, 6:58):
>
>     Tamás,
>
>     that doesn't need to be related to the pushover code. Do you run the spiram fix? I had this kind of heap corruption crashes frequently on builds without
>     the spiram fix but not once with the fix.
>
>     Regards,
>     Michael
>
>
>     Am 05.06.20 um 05:29 schrieb Tamás Kovács:
>>     Some day's ago i enabled Pushover notifications and i get some crash after that.
>>
>>     The crash backtrase is: 
>>     Backtrace: 0x4008b75f 0x4008b9f9 0x4010b253 0x40098c5f 0x40084361 0x40084945 0x4000bec7 0x401c1181 0x400f01e1 0x400f0dbb 0x400f0db4 0x400f0db4 0x400f0db4
>>     0x400f0db4 0x40156109 0x401550da 0x400f3545 0x400f375e 0x400f37d5 0x400f37e5
>>     a2l output is:
>>
>>     kommykt at MacBook-Air OVMS.V3 % a2l 0x4008b75f 0x4008b9f9 0x4010b253 0x40098c5f 0x40084361 0x40084945 0x4000bec7 0x401c1181 0x400f01e1 0x400f0dbb
>>     0x400f0db4 0x400f0db4 0x400f0db4 0x400f0db4 0x40156109 0x401550da 0x400f3545 0x400f375e 0x400f37d5 0x400f37e5
>>
>>     Using elf file: /Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/build/ovms3.elf
>>
>>
>>     0x4008b75f is in invoke_abort (/Users/kommykt/esp/esp-idf/components/esp32/panic.c:156).
>>
>>     151#endif
>>
>>     152    while (1) {
>>
>>     153        if (esp_cpu_in_ocd_debug_mode()) {
>>
>>     154            __asm__ ("break 0,0");
>>
>>     155        }
>>
>>     156        *((int *) 0) = 0;
>>
>>     157    }
>>
>>     158}
>>
>>     159
>>
>>     160void abort()
>>
>>
>>     0x4008b9f9 is in abort (/Users/kommykt/esp/esp-idf/components/esp32/panic.c:171).
>>
>>     166    * don't overwrite that.
>>
>>     167    */
>>
>>     168    if (esp_reset_reason_get_hint() == ESP_RST_UNKNOWN) {
>>
>>     169        esp_reset_reason_set_hint(ESP_RST_PANIC);
>>
>>     170    }
>>
>>     171    invoke_abort();
>>
>>     172}
>>
>>     173
>>
>>     174
>>
>>     175static const char *edesc[] = {
>>
>>
>>     0x4010b253 is in __assert_func (../../../.././newlib/libc/stdlib/assert.c:63).
>>
>>
>>     0x40098c5f is in multi_heap_free (/Users/kommykt/esp/esp-idf/components/heap/multi_heap_poisoning.c:214).
>>
>>     209        return;
>>
>>     210    }
>>
>>     211    multi_heap_internal_lock(heap);
>>
>>     212
>>
>>     213    poison_head_t *head = verify_allocated_region(p, true);
>>
>>     214    assert(head != NULL);
>>
>>     215
>>
>>     216    #ifdef SLOW
>>
>>     217    /* replace everything with FREE_FILL_PATTERN, including the poison head/tail */
>>
>>     218    memset(head, FREE_FILL_PATTERN,
>>
>>
>>     0x40084361 is in heap_caps_free (/Users/kommykt/esp/esp-idf/components/heap/heap_caps.c:268).
>>
>>     263        ptr = (void *)dramAddrPtr[-1];
>>
>>     264    }
>>
>>     265
>>
>>     266    heap_t *heap = find_containing_heap(ptr);
>>
>>     267    assert(heap != NULL && "free() target pointer is outside heap areas");
>>
>>     268    multi_heap_free(heap->heap, ptr);
>>
>>     269}
>>
>>     270
>>
>>     271IRAM_ATTR void *heap_caps_realloc( void *ptr, size_t size, int caps)
>>
>>     272{
>>
>>
>>     0x40084945 is in _free_r (/Users/kommykt/esp/esp-idf/components/newlib/syscalls.c:42).
>>
>>     37    return heap_caps_malloc_default( size );
>>
>>     38}
>>
>>     39
>>
>>     40void IRAM_ATTR _free_r(struct _reent *r, void* ptr)
>>
>>     41{
>>
>>     42    heap_caps_free( ptr );
>>
>>     43}
>>
>>     44
>>
>>     45void* IRAM_ATTR _realloc_r(struct _reent *r, void* ptr, size_t size)
>>
>>     46{
>>
>>
>>     0x401c1181 is in operator delete(void*) (/Volumes/build/idf/crosstool-NG/.build/src/gcc-5.2.0/libstdc++-v3/libsupc++/del_op.cc:46).
>>
>>
>>     0x400f01e1 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
>>     std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>     >::_M_drop_node(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)
>>     (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/ext/new_allocator.h:110).
>>
>>     105      }
>>
>>     106
>>
>>     107      // __p is not permitted to be a null pointer.
>>
>>     108      void
>>
>>     109      deallocate(pointer __p, size_type)
>>
>>     110      { ::operator delete(__p); }
>>
>>     111
>>
>>     112      size_type
>>
>>     113      max_size() const _GLIBCXX_USE_NOEXCEPT
>>
>>     114      { return size_t(-1) / sizeof(_Tp); }
>>
>>
>>     0x400f0dbb is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
>>     std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>     >::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)
>>     (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1614).
>>
>>     1609      // Erase without rebalancing.
>>
>>     1610      while (__x != 0)
>>
>>     1611{
>>
>>     1612  _M_erase(_S_right(__x));
>>
>>     1613  _Link_type __y = _S_left(__x);
>>
>>     1614  _M_drop_node(__x);
>>
>>     1615  __x = __y;
>>
>>     1616}
>>
>>     1617    }
>>
>>     1618
>>
>>     0x400f0db4 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
>>     std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>     >::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)
>>     (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1612).
>>
>>     1607    _M_erase(_Link_type __x)
>>
>>     1608    {
>>
>>     1609      // Erase without rebalancing.
>>
>>     1610      while (__x != 0)
>>
>>     1611{
>>
>>     1612  _M_erase(_S_right(__x));
>>
>>     1613  _Link_type __y = _S_left(__x);
>>
>>     1614  _M_drop_node(__x);
>>
>>     1615  __x = __y;
>>
>>     1616}
>>
>>
>>     0x400f0db4 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
>>     std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>     >::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)
>>     (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1612).
>>
>>     1607    _M_erase(_Link_type __x)
>>
>>     1608    {
>>
>>     1609      // Erase without rebalancing.
>>
>>     1610      while (__x != 0)
>>
>>     1611{
>>
>>     1612  _M_erase(_S_right(__x));
>>
>>     1613  _Link_type __y = _S_left(__x);
>>
>>     1614  _M_drop_node(__x);
>>
>>     1615  __x = __y;
>>
>>     1616}
>>
>>
>>     0x400f0db4 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
>>     std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>     >::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)
>>     (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1612).
>>
>>     1607    _M_erase(_Link_type __x)
>>
>>     1608    {
>>
>>     1609      // Erase without rebalancing.
>>
>>     1610      while (__x != 0)
>>
>>     1611{
>>
>>     1612  _M_erase(_S_right(__x));
>>
>>     1613  _Link_type __y = _S_left(__x);
>>
>>     1614  _M_drop_node(__x);
>>
>>     1615  __x = __y;
>>
>>     1616}
>>
>>
>>     0x400f0db4 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
>>     std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>     >::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const,
>>     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)
>>     (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1612).
>>
>>     1607    _M_erase(_Link_type __x)
>>
>>     1608    {
>>
>>     1609      // Erase without rebalancing.
>>
>>     1610      while (__x != 0)
>>
>>     1611{
>>
>>     1612  _M_erase(_S_right(__x));
>>
>>     1613  _Link_type __y = _S_left(__x);
>>
>>     1614  _M_drop_node(__x);
>>
>>     1615  __x = __y;
>>
>>     1616}
>>
>>
>>     0x40156109 is in Pushover::EventListener(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*)
>>     (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:858).
>>
>>     853
>>
>>     854      _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a);
>>
>>     855#endif
>>
>>     856
>>
>>     857      ~_Rb_tree() _GLIBCXX_NOEXCEPT
>>
>>     858      { _M_erase(_M_begin()); }
>>
>>     859
>>
>>     860      _Rb_tree&
>>
>>     861      operator=(const _Rb_tree& __x);
>>
>>     862
>>
>>     0x401550da is in std::_Function_handler<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*),
>>     std::_Bind<std::_Mem_fn<void (Pushover::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*)> (Pushover*,
>>     std::_Placeholder<1>, std::_Placeholder<2>)> >::_M_invoke(std::_Any_data const&, std::__cxx11::basic_string<char, std::char_traits<char>,
>>     std::allocator<char> >&&, void*&&) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/functional:600).
>>
>>     595      template<typename... _Args, typename _Req
>>
>>     596              = _Require<typename _Traits::__lvalue,
>>
>>     597                          _CheckArgs<_Pack<_Args...>>>>
>>
>>     598result_type
>>
>>     599operator()(_Class* __object, _Args&&... __args) const
>>
>>     600{ return (__object->*_M_pmf)(std::forward<_Args>(__args)...); }
>>
>>     601
>>
>>     602      // Handle smart pointers, references and pointers to derived
>>
>>     603      template<typename _Tp, typename... _Args, typename _Req
>>
>>     604              = _Require<_NotSame<_Class, _Tp>, _NotSame<_Class*, _Tp>,
>>
>>
>>     0x400f3545 is in std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
>>     void*)>::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*) const
>>     (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/functional:2271).
>>
>>     2266    function<_Res(_ArgTypes...)>::
>>
>>     2267    operator()(_ArgTypes... __args) const
>>
>>     2268    {
>>
>>     2269      if (_M_empty())
>>
>>     2270__throw_bad_function_call();
>>
>>     2271      return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
>>
>>     2272    }
>>
>>     2273
>>
>>     2274#if __cpp_rtti
>>
>>     2275  template<typename _Res, typename... _ArgTypes>
>>
>>
>>     0x400f375e is in OvmsEvents::HandleQueueSignalEvent(event_queue_t*)
>>     (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/main/ovms_events.cpp:234).
>>
>>     229      {
>>
>>     230      for (EventCallbackList::iterator itc=el->begin(); itc!=el->end(); ++itc)
>>
>>     231        {
>>
>>     232        m_current_started = monotonictime;
>>
>>     233        m_current_callback = *itc;
>>
>>     234        m_current_callback->m_callback(m_current_event, msg->body.signal.data);
>>
>>     235        m_current_callback = NULL;
>>
>>     236        }
>>
>>     237      }
>>
>>     238    }
>>
>>
>>     0x400f37d5 is in OvmsEvents::EventTask() (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/main/ovms_events.cpp:185).
>>
>>     180      switch(msg.type)
>>
>>     181        {
>>
>>     182        case EVENT_none:
>>
>>     183          break;
>>
>>     184        case EVENT_signal:
>>
>>     185          HandleQueueSignalEvent(&msg);
>>
>>     186          break;
>>
>>     187        default:
>>
>>     188          break;
>>
>>     189        }
>>
>>
>>     0x400f37e5 is in EventLaunchTask(void*) (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/main/ovms_events.cpp:56).
>>
>>     51
>>
>>     52void EventLaunchTask(void *pvParameters)
>>
>>     53  {
>>
>>     54  OvmsEvents* me = (OvmsEvents*)pvParameters;
>>
>>     55
>>
>>     56  me->EventTask();
>>
>>     57  }
>>
>>     58
>>
>>     59void event_trace(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, const char* const* argv)
>>
>>     60  {
>>
>>
>>     -- 
>>     Üdvözlettel:
>>     Kovács Tamás
>>
>>
>>     _______________________________________________
>>     OvmsDev mailing list
>>     OvmsDev at lists.openvehicles.com <mailto:OvmsDev at lists.openvehicles.com>
>>     http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>
>     -- 
>     Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
>     Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
>
>     _______________________________________________
>     OvmsDev mailing list
>     OvmsDev at lists.openvehicles.com <mailto:OvmsDev at lists.openvehicles.com>
>     http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>
>
>
> -- 
> Üdvözlettel:
> Kovács Tamás
>
>
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.openvehicles.com
> http://lists.openvehicles.com/mailman/listinfo/ovmsdev

-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20200605/775b2b78/attachment.htm>


More information about the OvmsDev mailing list