Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

raspberrypi mdns calls lwip without holding the core lock

Aperta
#11,182 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
49/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
c, raspberry-pi
Ambito
networking

Direzione di ricerca

Start with ports/raspberrypi/common-hal/mdns/Server.c and compare its lwIP calls with the lock usage in common-hal/socketpool/ and common-hal/wifi/Radio.c; check the lock macros in ports/raspberrypi/mpconfigport.h. Review every call site listed in the issue, paying particular attention to paths that can raise or fail allocation. Done means those calls are protected without leaving the lock held on an error path.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

network rp2

Claude wrote this:

ports/raspberrypi/common-hal/mdns/Server.c calls lwip's mdns API without holding the lwip core lock.

lwip expects it. LWIP_ASSERT_CORE_LOCKED() is the first statement in mdns_resp_add_service(), mdns_resp_del_service(), mdns_resp_add_netif(), mdns_resp_rename_netif(), mdns_resp_remove_netif() and others (ports/raspberrypi/lib/lwip/src/apps/mdns/mdns.c:2398,2460,2502,2546,2585, among more). It compiles to a no-op here because LWIP_CHECK_CORE_LOCKING isn't set in lwipopts.h, which is presumably why this hasn't been noticed.

The port runs lwip from a low-priority IRQ — async_context_threadsafe_background.c and cyw43_arch_threadsafe_background.c are in ports/raspberrypi/Makefile:43,45 — so these calls really can race with lwip's own processing rather than merely violating a convention.

Unlocked call sites in that file:

  • mdns_server_construct() — mdns_resp_init(), mdns_resp_restart(), mdns_resp_add_secondary_hostname()
  • common_hal_mdns_server_set_hostname() — mdns_resp_netif_active(), mdns_resp_rename_netif(), mdns_resp_add_netif()
  • common_hal_mdns_server_deinit() — mdns_resp_remove_netif()
  • common_hal_mdns_server_advertise_service() — mdns_resp_del_service(), mdns_resp_add_service()
  • mdns_server_find() and common_hal_mdns_server_find() — mdns_search_service(), mdns_search_stop()

The port already has the primitive: MICROPY_PY_LWIP_ENTER / MICROPY_PY_LWIP_EXIT map to cyw43_arch_lwip_begin() / cyw43_arch_lwip_end() (ports/raspberrypi/mpconfigport.h:50-52), and common-hal/socketpool/ and common-hal/wifi/Radio.c use them.

Care is needed where a locked region can raise — mp_raise_RuntimeError() on a failed mdns_resp_add_service() slot, and m_malloc_fail() — since a longjmp out of a locked region would leave the lock held.

Claude noticed this while reviewing #11181, which locks the TXT record swap in assign_txt_records() but deliberately leaves the rest of the file alone so this can be looked at on its own.

Lingua principale
C
Stelle
4.6k
Fork
1.4k
Merge medio
1g 7h
PR unite (30g)
166

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di adafruit/circuitpython

Tutte le issue di adafruit/circuitpython

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.