Open Thermelgy-Repo opened 1 year ago
I can confirm the same problem is happening to me on mDash v1.2.16 and Platformio ESP32 core 6.3.1 (latest). Opened a ticket about it: https://github.com/cesanta/mDash/issues/21
The loop() task indeed stops when mDash functions are called. I'm having random issues even with mDashConfigGet.
Side note: If possible, bring back the CLI as well. Not having it breaks the device provisioning flow we had.
Side note: If possible, bring back the CLI as well. Not having it breaks the device provisioning flow we had.
Issue #20 open on this one.
Gents, the code is wide open.
Sends your PRs.
I've temporarily commented lines 104 and 107 (xSemaphoreTakeRecursive and xSemaphoreGiveRecursive) for testing and mDash works perfectly (for as long as you don't call any mDash function while another is still running 😀). So, this is definetely an Mutex-related issue. But, I could not find anything wrong with the implementation in mDash.c itself. The calls for taking and giving the semaphore are properly placed and there should be no holdup...
I have solved the issue, plz check the PR. https://github.com/cesanta/mDash/pull/24
You just added a duplicate of notify without the locks - that's not a proper fix.
I guess that the core of the issue is here: https://github.com/cesanta/mDash/blob/8bd664773c5b041ed582b59d446478cf7ef582c3/src/mDash.c#L736-L740
All functions that may be called by the mDashPoll(), for example mDashShadowUpdate(), will deadlock. So I guess that the proper fix would be to just remove the locks from mDashShadowUpdate() and document that the mutex locks must be called manually before and after, in case the function is called outside the mdash thread.
You just added a duplicate of notify without the locks - that's not a proper fix.
I guess that the core of the issue is here:
https://github.com/cesanta/mDash/blob/8bd664773c5b041ed582b59d446478cf7ef582c3/src/mDash.c#L736-L740
All functions that may be called by the mDashPoll(), for example mDashShadowUpdate(), will deadlock. So I guess that the proper fix would be to just remove the locks from mDashShadowUpdate() and document that the mutex locks must be called manually before and after, in case the function is called outside the mdash thread.
Thankq @cpq for your suggestion, So you meant to directly remove the MutexLocks from the mDashNotify() as well as mDashPoll() functions?
@Thermelgy-Repo from the mDashNotify only. It would be a user responsibility to surround the mDashNotify call with locks manually if it gets called from the outside of Mongoose task.
Dear @cpq @novlean, Thanks for your great efforts.
My code was running perfectly with Mdash V1.2.14 & the esp-Arduino V1.0.6.
Recently, I have upgraded the esp-Arduino version from V1.0.6 to V2.0.9 & the mDash version from V1.2.14 to V1.2.16. Now, when I am using
mDashShadowUpdate("{%Q:{%Q:{%Q:%Q}}}","state", "reported", "Key", "Success");
. It is stopping the loop() task & the Mdash goes offline & comes back. The Mdash is working such as FS & RPC, But the execution of loop() task is stopped.Some Insights: I have checked the mDashNotify() function, saw MDashMutexLock() initialization. I have a doubt that may be the Mutex is stopping the loop() function or some other freeRTOS related problems.
Build Logs:
Platform.ini file:
Kindly help me to solve the issue.