Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

raspberrypi mdns calls lwip without holding the core lock

Đang mở
#11,182 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
49/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
c, raspberry-pi
Lĩnh vực
networking

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.

Ngôn ngữ chính
C
Star
4.6k
Fork
1.4k
Merge trung bình
1 ngày 8 giờ
Pull request đã merge (30 ngày)
155

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của adafruit/circuitpython

Tất cả issue của adafruit/circuitpython

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.