Crash creating and using OSLCompiler instances in mutliple threads
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ó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- cpp
- Lĩnh vực
- compilers, computer-graphics
Hướng nghiên cứu
Không có tệp hoặc bài kiểm thử nào được nêu tên. Hãy bắt đầu với SymbolTable::delete_syms() và TypeSpec::struct_list() dùng chung được mô tả trong báo cáo, sau đó theo dõi cách chúng được OSLCompiler và ShadingSystem sử dụng. Công việc được xem là hoàn tất khi có một thiết kế đã được thống nhất về quyền sở hữu hoặc đồng bộ hóa cho các instance đồng thời, cùng bằng chứng cho thấy crash được ngăn chặn.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Problem
In the Cycles renderer we are getting crashes doing different renders in different threads, each creating their own OSLCompiler instances. From #654 it appears that this is supposed to work.
I think I understand the cause and am willing to contribute a fix, but looking for advice on the best way to solve this.
What happens is that OSLCompiler ends up calling this in its destructor:
void
SymbolTable::delete_syms()
{
for (auto& sym : m_allsyms)
delete sym;
m_allsyms.clear();
TypeSpec::struct_list().clear();
}
This TypeSpec::struct_list() is a global variable used by OSLCompiler, and also ShadingSystem. So fully clearing it here is not safe.
I can think of a few solutions:
- Never clear this list and accept the memory usage.
ShadingSystemdoes not clear it as far as I can tell, so you already have this when not compiling shaders. - Add reference counting to only clear this list when there are zero classes using it. This also involves adding mutex protection in a bunch of places.
- Add a struct list per
OSLCompilerandShadingSystem, instead of making it global.
Solution (3) seems like the best to me, does that seem reasonable? Or is there some performance reason that this should be reused.
Versions
- OSL branch/version: master branch, 6b6637e
- OS: Ubuntu Linux
- C++ compiler: Clang
- Ngôn ngữ chính
- C++
- Star
- 2.3k
- Fork
- 414
- Merge trung bình
- 4 ngày 2 giờ
- Pull request đã merge (30 ngày)
- 19
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của AcademySoftwareFoundation/OpenShadingLanguage
-
build / testing / port / CI
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
AcademySoftwareFoundation/OpenShadingLanguage#2148 · 5 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
AcademySoftwareFoundation/OpenShadingLanguage#2109 · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 52/100
AcademySoftwareFoundation/OpenShadingLanguage#2183 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
build / testing / port / CI
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
AcademySoftwareFoundation/OpenShadingLanguage#2182 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Tracesets handling proposalĐang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
AcademySoftwareFoundation/OpenShadingLanguage#2146 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của AcademySoftwareFoundation/OpenShadingLanguage
Issue tương tự
-
Web3 RPC: one-element batch request returns an object instead of an array (breaks ethers.js v6)Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
FISCO-BCOS/FISCO-BCOS#5706 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
[开源推荐] Windows 系统维护工具箱,支持后台任务队列Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
521xueweihan/HelloGitHub#4011 ·
-
docs(simulation): Quickstart publishes UDP 14550, which the SITL images' own docs say not to doĐang mởstatus:needs-triage
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 78/100
PX4/PX4-Autopilot#29292 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
I/O internal correctness medium priority rt_lib
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 79/100
Maintainer thường phản hồi trong vòng 1 ngày
-
GUI
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
sonic-pi-net/sonic-pi#3594 ·