segfault when using std.parallelism and std.process.executeShell
Ali Çehreli
acehreli at yahoo.com
Tue Jan 7 15:12:08 PST 2014
On 12/12/2013 08:33 PM, Nikhil Padmanabhan wrote:
> Hi,
>
> The following code dies with a segfault :
>
> import std.stdio, std.parallelism, std.process;
>
> void main() {
> auto a=["hello","world","goodbye"];
> foreach(s; parallel(a,1)) {
> auto ls=executeShell("echo "~s);
> writeln(ls.output);
> }
> }
I don't know the original problem but that program works without any
problem with the current dmd on github.
Ali
>
> both in ldc and dmd. Removing either the "parallel" or running something
> other than executeShell (eg. just doing a writeln) works, which suggests
> to me that it's something about the way executeShell is interacting with
> parallel.
>
> Pulling it up in lldb, I get :
> * thread #2: tid = 0x16738e6, 0x0000000100039198
> test`D3std7process7environFNbNdNeZxPPa + 20, stop reason =
> EXC_BAD_ACCESS (code=1, address=0x0)
> frame #0: 0x0000000100039198 test`D3std7process7environFNbNdNeZxPPa
> + 20
>
> Any thoughts on what might be going wrong? Is executeShell somehow not
> threadsafe?
>
> Thanks!
> -- Nikhil
More information about the Digitalmars-d-learn
mailing list