每当我在创建线程之前调用readdir时,我都会收到如下错误:
perl(2820,0x7fff70c33ca0) malloc: *** error for object 0x10082e600: pointer
being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap
奇怪的是,当我在创建线程之前调用readdir(即在任何并发代码中都没有调用readdir)时会发生这种情况。我甚至没有使用readdir的结果,只是调用它似乎搞砸了。当我摆脱它,事情似乎工作正常。下面是一些示例代码:
opendir(DIR, $someDir);
my @allFiles = readdir(DIR);
close(DIR);
my $thread = threads->create(\&sub1);
$thread->join();
sub sub1 {
print "in thread\n"
}
答案 0 :(得分:4)
您需要使用closedir而不是close来关闭目录句柄。 修复使得这个工作正常,虽然我用close()看到的symtom有点不同:
*** glibc detected *** perl: double free or corruption (!prev): 0x09bc7d28 ***
然而,这应该仍然被报告为一个错误,因为在程序结束时让目录句柄自动关闭应该是完全可以的。
答案 1 :(得分:0)
对于所有版本的perl直到最新(或两个)开发版本,你会遇到打开的dirhandle问题 - 这个问题最近已修复。
P.S。使用词法手柄。