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

Sub::Quote deferred subs lose identity across threads

Đang mở
#1,420 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
52/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
perl
Lĩnh vực
backend, testing-qa

Hướng nghiên cứu

Bắt đầu với t/sub-quote-threads.t và tái hiện nó bằng cả hai lệnh được hiển thị cho các backend JVM và trình thông dịch. Đọc Sub/Defer.pm quanh dòng 75 và phần triển khai CLONE của nó, sau đó theo dõi các tham chiếu deferred-sub và %DEFERRED trong suốt quá trình tạo thread. Hoàn thành khi các sub quoted và deferred giữ nguyên danh tính của chúng và bài kiểm thử hồi quy tập trung chạy đạt trên cả hai backend.

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

Mô tả

Summary

Sub::Quote 2.006009 fails when quoted/deferred subs are retrieved or invoked from PerlOnJava threads. The failure reproduces on both the JVM and interpreter backends.

Reproduction

The CPAN random tester record is:

2026-09-18 07:06:07 FAIL Sub::Quote Sub::Defer ... 5430 5435 5/5435 subtests failed; 1/15 test programs failed

The failing test is:

t/sub-quote-threads.t

Using the built distribution with its library and test-library paths:

timeout 120 ./jperl -I<build>/blib/lib -I<build>/t/lib <build>/t/sub-quote-threads.t
timeout 120 ./jperl --interpreter -I<build>/blib/lib -I<build>/t/lib <build>/t/sub-quote-threads.t

Both backends fail identically: 5 of 6 assertions fail. The only passing assertion is the unquoted One case. Quoted/deferred sub retrieval and execution return undef, including the two-thread cases.

The complete CPAN run has 14 of 15 test programs passing; only t/sub-quote-threads.t fails. PerlOnJava also emits:

Use of uninitialized value in hash element at .../Sub/Defer.pm line 75

Expected behavior

System Perl passes the complete oracle run: 7036/7036 tests, including t/sub-quote-threads.t.

Technical analysis

Sub::Defer::undefer_sub looks up deferred-sub metadata in %DEFERRED using the deferred sub reference. Sub::Defer provides a CLONE implementation specifically to repair stringified subreference keys after threading.

On PerlOnJava, the lookup at Sub/Defer.pm line 75 receives an undefined or otherwise non-matching key after the thread boundary. This indicates that thread cloning is not preserving or remapping the identity/metadata of deferred quoted subs as required by Sub::Defer::CLONE.

The issue is present in both execution backends, so it appears to be shared runtime/thread-cloning behavior rather than a JVM-backend-only problem or a module-specific compilation issue.

Impact

Non-threaded Sub::Quote functionality passes, but applications using quoted/deferred subs from Perl threads can silently receive undef or fail to invoke the intended subroutine. This is a compatibility bug affecting modules that use Sub::Quote together with threads.

Suggested investigation

  1. Trace cloning of the deferred sub reference and the %DEFERRED metadata across thread creation.
  2. Compare PerlOnJava's handling of CLONE and stringified subreference keys with system Perl.
  3. Add a focused project-owned regression test covering quote_sub, quoted_from_sub, unquote_sub, and deferred-sub invocation from a child thread on both backends.
Ngôn ngữ chính
Perl
Star
64
Fork
7
Merge trung bình
5 giờ 8 phút
Pull request đã merge (30 ngày)
193

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

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 fglock/PerlOnJava

Tất cả issue của fglock/PerlOnJava

Issue tương tự

Thêm issue về Perl

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.