www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - 'Access Violation Error' with parallel-foreach loop

reply ooyu <dummy dummy.org> writes:
When i was uing parallel-foreach loop, got this error:

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
object.Error (0): Access Violation
----------------
0x0056CCB8 in _flushbu
0x005663C7 in fwrite
0x0041D39F in nothrow  nogc  trusted uint 
std.stdio.trustedFwrite!(char).trustedFwrite(shared(core.stdc.stdio._iobuf)*,
const(char[]))
at C:\D\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(3836)
0x004611AA in D3std6format99__T14formattedWri at 
C:\D\dmd2\windows\bin\..\..\src\phobos\std\format.d(556)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

code is here:
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
foreach( web_url; parallel(urls) ){
     try{
         auto rq = Request(); // using dlang-requests library
         auto d = rq.get( std.uri.encode(web_url) ); // file url

         File f = File(path_hash[web_url], "wb");
         f.write( d.responseBody );
         f.close();
     }
     catch(std.exception.ErrnoException e){}
}
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

I don't understand why got Access Violation error. :-(
Mar 18
next sibling parent reply ikod <geller.garry gmail.com> writes:
On Saturday, 18 March 2017 at 16:15:30 UTC, ooyu wrote:
 When i was uing parallel-foreach loop, got this error:

  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 object.Error (0): Access Violation
 ----------------
 0x0056CCB8 in _flushbu
 0x005663C7 in fwrite
 0x0041D39F in nothrow  nogc  trusted uint 
 std.stdio.trustedFwrite!(char).trustedFwrite(shared(core.stdc.stdio._iobuf)*,
const(char[]))
 at C:\D\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(3836)
 0x004611AA in D3std6format99__T14formattedWri at 
 C:\D\dmd2\windows\bin\..\..\src\phobos\std\format.d(556)
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 code is here:
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 foreach( web_url; parallel(urls) ){
     try{
         auto rq = Request(); // using dlang-requests library
         auto d = rq.get( std.uri.encode(web_url) ); // file url

         File f = File(path_hash[web_url], "wb");
         f.write( d.responseBody );
         f.close();
     }
     catch(std.exception.ErrnoException e){}
 }
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 I don't understand why got Access Violation error. :-(
Hello, Also don't understand the reason and I can't reproduce this error. Can you try to pass ubyte[] to f.write() explicitly converting responseBody to array? Like f.write(d.responseBody.data());
Mar 18
parent ooyu <dummy dummy.org> writes:
On Saturday, 18 March 2017 at 20:57:59 UTC, ikod wrote:
 On Saturday, 18 March 2017 at 16:15:30 UTC, ooyu wrote:
 When i was uing parallel-foreach loop, got this error:

  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 object.Error (0): Access Violation
 ----------------
 0x0056CCB8 in _flushbu
 0x005663C7 in fwrite
 0x0041D39F in nothrow  nogc  trusted uint 
 std.stdio.trustedFwrite!(char).trustedFwrite(shared(core.stdc.stdio._iobuf)*,
const(char[]))
 at C:\D\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(3836)
 0x004611AA in D3std6format99__T14formattedWri at 
 C:\D\dmd2\windows\bin\..\..\src\phobos\std\format.d(556)
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 code is here:
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 foreach( web_url; parallel(urls) ){
     try{
         auto rq = Request(); // using dlang-requests library
         auto d = rq.get( std.uri.encode(web_url) ); // file url

         File f = File(path_hash[web_url], "wb");
         f.write( d.responseBody );
         f.close();
     }
     catch(std.exception.ErrnoException e){}
 }
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 I don't understand why got Access Violation error. :-(
Hello, Also don't understand the reason and I can't reproduce this error. Can you try to pass ubyte[] to f.write() explicitly converting responseBody to array? Like f.write(d.responseBody.data());
No no, not work. :-( when i trying this:  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ File f = File(path_hash[web_url], "wb"); f.write( d.responseBody.data() ); f.close();  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ downloaded text file like a byte[] array:  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ [255, 216, 255, 225, 32, 246, 69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 7, 1 ... // this is a file that downloaded and open notepad.exe  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Mar 18
prev sibling parent reply Vladimir Panteleev <thecybershadow.lists gmail.com> writes:
On Saturday, 18 March 2017 at 16:15:30 UTC, ooyu wrote:
 I don't understand why got Access Violation error. :-(
That looks like https://issues.dlang.org/show_bug.cgi?id=13727, though I thought a fix was included in recent DMD Windows versions. Try using std.file.write.
Mar 18
parent reply ooyu <dummy dummy.org> writes:
On Saturday, 18 March 2017 at 22:27:27 UTC, Vladimir Panteleev 
wrote:
 On Saturday, 18 March 2017 at 16:15:30 UTC, ooyu wrote:
 I don't understand why got Access Violation error. :-(
That looks like https://issues.dlang.org/show_bug.cgi?id=13727, though I thought a fix was included in recent DMD Windows versions. Try using std.file.write.
Aha! Thank you. I try again using std.file.write and input ubyte[] data.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ auto rq = Request(); auto d = rq.get( std.uri.encode(web_url) ); std.file.write(path_hash[web_url], d.responseBody.data);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ working pretty :-)
Mar 18
parent ikod <geller.garry gmail.com> writes:
On Sunday, 19 March 2017 at 00:46:29 UTC, ooyu wrote:
 On Saturday, 18 March 2017 at 22:27:27 UTC, Vladimir Panteleev 
 wrote:
 [...]
Aha! Thank you. I try again using std.file.write and input ubyte[] data.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ auto rq = Request(); auto d = rq.get( std.uri.encode(web_url) ); std.file.write(path_hash[web_url], d.responseBody.data);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ working pretty :-)
It would be nice to know what actually solved problem.
Mar 19