Bug 17402 – dirEntries iterator crashes in conjunction with readText

Status
RESOLVED
Resolution
INVALID
Severity
major
Priority
P1
Component
phobos
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2017-05-16T09:40:00Z
Last change time
2017-06-20T13:36:47Z
Assigned to
nobody
Creator
razvan.nitu1305

Comments

Comment #0 by razvan.nitu1305 — 2017-05-16T09:40:51Z
The following code crashes: auto dFiles = dirEntries("dmd/phobos/std/", "*.d", SpanMode.depth); foreach (d; dFiles) { string input = readText(d.name); } It seems that somehow readText breaks the dirEntries iterator. It works for the first five files but then it crashes with the following error message: /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D4core7runtime18runModuleUnitTestsUZ19unittestSegvHandlerUNbiPS4core3sys5posix6signal9siginfo_tPvZv+0x38)[0x8244a4] /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7f059337a390] /lib/x86_64-linux-gnu/libc.so.6(readdir+0x32)[0x7f05925be8a2] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D3std4file15DirIteratorImpl4nextMFZb+0xa5)[0x815fa5] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D3std4file15DirIteratorImpl8popFrontMFZv+0x3f)[0x8162e7] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D3std4file11DirIterator8popFrontMFZv+0x11)[0x816665] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D3std9algorithm9iteration125__T12FilterResultS80_D3std4file10dirEntriesFAyaAyaE3std4file8SpanModebZ1fMFNaNbS3std4file8DirEntryZbTS3std4file11DirIteratorZ12FilterResult8popFrontMFZv+0x24)[0x816ed4] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D4ddmd5parse18__unittestL8445_11FZv+0x134)[0x6c3bac] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D4ddmd5parse9__modtestFZv+0x9)[0x6db0c9] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D4core7runtime18runModuleUnitTestsUZ14__foreachbody2MFPS6object10ModuleInfoZi+0x2d)[0x8244f1] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D6object10ModuleInfo7opApplyFMDFPS6object10ModuleInfoZiZ9__lambda2MFyPS6object10ModuleInfoZi+0x23)[0x8099c3] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D2rt5minfo17moduleinfos_applyFMDFyPS6object10ModuleInfoZiZ14__foreachbody2MFKS2rt19sections_elf_shared3DSOZi+0x56)[0x80ece6] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D2rt19sections_elf_shared3DSO7opApplyFMDFKS2rt19sections_elf_shared3DSOZiZi+0x46)[0x80f04a] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D2rt5minfo17moduleinfos_applyFMDFyPS6object10ModuleInfoZiZi+0x22)[0x80ec72] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D6object10ModuleInfo7opApplyFMDFPS6object10ModuleInfoZiZi+0x22)[0x80999a] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(runModuleUnitTests+0x9d)[0x8243d1] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZv+0x17)[0x80cb8b] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv+0x24)[0x80cb28] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_d_run_main+0x1e0)[0x80ca8c] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(main+0x22)[0x69ef7a] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f0592517830] /home/razvan/dmd/dmd/generated/linux/release/64/dmd(_start+0x29)[0x5a9719
Comment #1 by andrei — 2017-05-16T12:43:36Z
Works for me. Maybe you have a mismatched combination of compiler/druntime/stdlib? Have you tried it on the latest release?
Comment #2 by dlang-bugzilla — 2017-05-16T17:16:42Z
Wow, that's a segfault inside libpthread (which for some reason gets called from glibc's readdir). If you can reproduce this reliably, can you get debug symbols for libc and libpthread and get a detailed stack trace?
Comment #3 by andrei — 2017-05-16T17:17:37Z
More info: the code only crashes when invoked from inside a dmd unittest.