Thread overview
segfault when using std.parallelism and std.process.executeShell
Dec 13, 2013
Nikhil Padmanabhan
Jan 07, 2014
Ali Çehreli
Jan 07, 2014
Kelet
December 13, 2013
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);
	}
}

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
January 07, 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

January 07, 2014
On Tuesday, 7 January 2014 at 23:12:09 UTC, Ali Çehreli wrote:
> don't know the original problem but that program works without any problem with the current dmd on github.

Works for me on dmd v2.064 (current stable) on Windows.