Memory leak in rare cases using foreach and parallel
    Guillaume Lathoud 
    gsub at glat.info
       
    Mon Oct 14 06:52:32 UTC 2019
    
    
  
Hello,
In a number-crunching app that tries many different configuration 
parameters, I observed in some rare cases a memory leak when 
doing:
     class Cfg { /* ...configuration parameters...*/ }
     auto cfg_range; // range that spits out the many 
configurations (instances of Cfg)
     foreach (cfg; parallel( cfg_range ))
     {
        // Do one computation for the set of parameters `cfg`
     }
using LDC 1.10.0 (based on dmd 2.080.1) on a linux machine.
This was difficult to reduce to a simple use case. The memory 
leak happened in rare cases, but in those cases, it always 
happened.
The workaround I found looked like this:
     foreach (i; parallel( cfg_range.length.iota ))
     {
       auto cfg = cfg_range[ i ];
       // Do one computation for the set of parameters `cfg`
     }
Hopefully this helps anyone encountering a similar issue and/or 
LDC developers.
Best regards,
Guillaume
    
    
More information about the digitalmars-d-ldc
mailing list