remove improper clearing of callback state for web workflow background callback#10966
remove improper clearing of callback state for web workflow background callback#10966dhalbert merged 3 commits intoadafruit:mainfrom
Conversation
|
Tests might be a little late for me sent DM with more info |
|
Making some changes pointed out by an LLM code review, so draft for now. EDIT: removed some incorrect changes in |
|
Four out of four boards I tested that failed under rc0 succeeded under 10966. I only found the earlier artifacts on 31aab5f I wasn't able to find artifacts for the LLM changes you made later as ed14186. |
|
@grgrant For some reason my second push did not force a rebuild, so there were no artifacts! I pushed a comment-only commit and was able to get all the jobs to re-run. Here are the new artifacts: https://github.com/adafruit/circuitpython/actions/runs/24775236913?pr=10966 |
|
All four boards I tested passed using the latest artifacts -- no bug seen. Feather ESP32-S3 N4R2 |
|
@grgrant thank you for the quick testing! |
tannewt
left a comment
There was a problem hiding this comment.
Thank you! I'll be happy to move to a proper RTOS.
@grgrant could you test? Thanks. You can use the artifact builds when they finish.
There were two issues here:
background_callback_add_core()was not checking the whole list of callbacks to see if the one being added was a duplicate. It was only checking the first one. It was also checkingcb->prevforNULL, for reasons that I don't believe made sense.supervisor/shared/workflow.cbefore it was added as a background callback. This meant that if it was already on the background callback list, itsnextandprevfields were being smashed, and that damaged the list structureThese problems only started being visible after #10840, the ESP-IDF v5.5.3 update, for unknown reasons (maybe some subtle FreeRTOS or wifi changes) and got worse with
10.2.0-rc.0, perhaps because of some workflow changes for Zephyr.@grgrant I tested with a couple of different programs, to make it easier to wait long enough to see what was going on. One waits 15 seconds, and the other waits for a button push.