Skip to content

Commit

Permalink
fix data race
Browse files Browse the repository at this point in the history
  • Loading branch information
abhishekparwal committed Apr 15, 2020
1 parent fb6866d commit dcf5d26
Showing 1 changed file with 23 additions and 6 deletions.
29 changes: 23 additions & 6 deletions codegen/module.go
Expand Up @@ -569,23 +569,25 @@ func (system *ModuleSystem) ResolveModules(
ch := make(chan resolveResult)
wg.Add(len(system.moduleSearchPaths[className]))

resolvedModulesCopy := copyResolveModule(resolvedModules)

for _, moduleDirectoryGlob := range system.moduleSearchPaths[className] {
go system.resolveModule(baseDirectory, moduleDirectoryGlob, className, packageRoot,
targetGenDir, defaultDependencies, ch, &wg, resolvedModules)
targetGenDir, defaultDependencies, ch, &wg, resolvedModulesCopy)
}
go func() {
wg.Wait()
close(ch)
}()

for ele := range ch {
if ele.err != nil {
return nil, ele.err
for result := range ch {
if result.err != nil {
return nil, result.err
}
if ele.module == nil {
if result.module == nil {
continue
}
mergeResolveMap(ele.module, resolvedModules, className)
mergeResolveMap(result.module, resolvedModules, className)
}
}

Expand All @@ -598,6 +600,21 @@ func (system *ModuleSystem) ResolveModules(
return classArrayModuleMap, nil
}

func copyResolveModule(resolvedModules map[string]map[string]*ModuleInstance) map[string]map[string]*ModuleInstance {
resolvedModulesCopy := map[string]map[string]*ModuleInstance{}
for className, instanceMap := range resolvedModules {
instanceMapCopy := resolvedModulesCopy[className]
if instanceMapCopy == nil {
instanceMapCopy = map[string]*ModuleInstance{}
resolvedModulesCopy[className] = instanceMapCopy
}
for instanceName, instance := range instanceMap {
instanceMapCopy[instanceName] = instance
}
}
return resolvedModulesCopy
}

type resolveResult struct {
err error
module map[string]map[string]*ModuleInstance
Expand Down

0 comments on commit dcf5d26

Please sign in to comment.