[Ovmsdev] Netmanager priority issue solved

Michael Balzer dexter at expeedo.de
Fri Jul 24 22:02:25 HKT 2020


It seems we've got another mutex issue in duktape:

OVMS# mo ta
Number of Tasks = 22        Stack:  Now   Max Total    Heap 32-bit
SPIRAM C# PRI CPU% BPR/MH
3FFAFB88    1 Blk esp_timer         436   708  4096   40288    644 
31232  0  22   0%  22/ 0
3FFC0E90    2 Blk eventTask         476  1884  4608     104      0     
0  0  20   0%  20/ 0
3FFC3314    3 Blk OVMS Events       704  3360  8192   92364      0 
35464  1   8   1%   8/ 0
3FFC6764    4 Rdy OVMS DukTape      496 10864 12288     580      0
189492  1   3  10%   3/_*42*_

…increasing once per minute. I'll have a look.

Regards,
Michael


Am 24.07.20 um 15:27 schrieb Michael Balzer:
> TL;DR: you need to pull my latest esp-idf changes.
>
> I've finally found & solved the strange priority changes for our
> netmanager task (i.e. being raised suddenly from origin 5 to 18/22): the
> bug was in the esp-idf posix threads mutex implementation.
>
> I had suspected the mutex priority inheritance for a while, so added a
> way to retrieve the internal mutex hold count for our task list. Using
> this I noticed the hold count would always & only raise by 2 whenever
> any kind of mongoose connection was closed.
>
> That lead me to checking the thread concurrency protection for mongoose
> mbufs, because every mongoose connection has two mbufs associated (rx &
> tx), each having a posix mutex.
>
> The bug was: posix mutexes were deleted after locking (taking) them.
> FreeRTOS mutexes must not be deleted while being taken, that breaks the
> priority inheritance (more precisely the disinheritance), with the
> visible effect being the mutex hold count not returning to zero.
>
> As a side effect, this may also solve the strange event task starvations
> (hope so…). I was investigating this as I suspected some busy loop in
> the netmanager context. With the netman running at prio 22, that would
> effectively block almost all other processing including the timer
> service. I've found & fixed one potential busy loop trigger in the
> netman that would have been caused by the netman task still running
> while all interfaces had been lost -- not sure if that could happen, but
> it would explain the effects.
>
> So please watch your crash debug info & report if the issue still turns up.
>
> Regards,
> Michael
>

-- 
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/20200724/7fd83c4c/attachment.htm>


More information about the OvmsDev mailing list