-
Notifications
You must be signed in to change notification settings - Fork 151
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
mDNS [BUG] halt on semaphore if iot button solution is used and use in a GPIO2 that is pushed to GND on button creation (IDFGH-14209) #708
Comments
Hi @filzek Are you calling the |
no, I am calling from another task that has a priority 5 and mdns is priority 5. What is odd is that if we diable the IO2 on button it works, so the button has 7 IOs setup, no matter if just 1 or the 7, if the IO2 is enable on it the crash happen. We can try to move to async to do it, but we think that somehow the semaphore routine is being blocked in the reading while io2 is setup, but it only happen if the IO2 is setup and is withing GND on it, if it lets open the crash doenst happen. |
Would you please share a simplified project or a reproducer, then? Calling |
cant reproduce it anymore with all the updates in the iot button and the sdk 5.4, so I will close. I have tested ESP32 with MDNS external memory, its working, but, the best is if the MALLOC usend in the MDNS could be adjusted on the mdns config to use internal or external memory as well, this would surfice and make things better for lowering the dram in the socs as it uses sometime more than 4kb of memory in the mdns allocs. |
Answers checklist.
General issue report
after searching to understand and debug we found out that using mDNS with Button if we use a GPIO 2 thread lock inside mDNS
New SDK 5.3.2 or older does a thread lock in the task while calling mdns_query_ptr, it just halt and lock it.
It happen if yhe Iot solution Button is being used as of espressif/button v3.4.0
it crashes the MDNS when the Button add the GPIO 2, so, if the GPIO 2 is used in button the MDNS jsut halt.
esp_err_t err2 = mdns_query_ptr(service_name, proto, 5000, 100, &results2);
so it keeps inside forever.we found out that the lock occrus on
esp_err_t mdns_query_generic(const char *name, const char *service, const char *proto, uint16_t type, mdns_query_transmission_type_t transmission_type, uint32_t timeout, size_t max_results, mdns_result_t **results)
at:
xSemaphoreTake(search->done_semaphore, portMAX_DELAY);
The behavior only happen if the GPIO2 is used to create the button
GPIO must be pushed to GND in the btn = iot_button_create(&btn_cfg); to create the bug
The text was updated successfully, but these errors were encountered: