Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

raspberrypi mdns calls lwip without holding the core lock

Abierto
#11,182 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
49/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
c, raspberry-pi
Área
networking

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
C
Estrellas
4.6k
Forks
1.4k
Merge medio
1 d 8 h
PR fusionados (30 d)
155

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de adafruit/circuitpython

Todos los issues de adafruit/circuitpython

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.