Re: segfault when using std.parallelism and std.process.executeShell

2014-01-07 Thread Ali Çehreli

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, 0x000100039198
test`D3std7process7environFNbNdNeZxPPa + 20, stop reason =
EXC_BAD_ACCESS (code=1, address=0x0)
 frame #0: 0x000100039198 test`D3std7process7environFNbNdNeZxPPa
+ 20

Any thoughts on what might be going wrong? Is executeShell somehow not
threadsafe?

Thanks!
-- Nikhil




Re: segfault when using std.parallelism and std.process.executeShell

2014-01-07 Thread Kelet

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.


segfault when using std.parallelism and std.process.executeShell

2013-12-12 Thread Nikhil Padmanabhan

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, 0x000100039198 
test`D3std7process7environFNbNdNeZxPPa + 20, stop reason = 
EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x000100039198 
test`D3std7process7environFNbNdNeZxPPa + 20


Any thoughts on what might be going wrong? Is executeShell 
somehow not threadsafe?


Thanks!
-- Nikhil