Snap for 6487251 from 0c7553cc1a58cf57540f5f251c0e4ce42929202b to r-keystone-qcom-release
Change-Id: If7ac98ec968d8257ed4a984bd3950016145102ee
diff --git a/bootstrap/command.go b/bootstrap/command.go
index 1e3b2fe..cbbd32d 100644
--- a/bootstrap/command.go
+++ b/bootstrap/command.go
@@ -183,6 +183,12 @@
var f *os.File
var buf *bufio.Writer
+ if emptyNinjaFile {
+ if err := ioutil.WriteFile(absolutePath(outFile), []byte(nil), outFilePermissions); err != nil {
+ fatalf("error writing empty Ninja file: %s", err)
+ }
+ }
+
if stage != StageMain || !emptyNinjaFile {
f, err = os.OpenFile(absolutePath(outFile), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, outFilePermissions)
if err != nil {
diff --git a/context.go b/context.go
index da86837..9a3253a 100644
--- a/context.go
+++ b/context.go
@@ -218,7 +218,16 @@
}
func (module *moduleInfo) Name() string {
- return module.group.name
+ // If this is called from a LoadHook (which is run before the module has been registered)
+ // then group will not be set and so the name is retrieved from logicModule.Name().
+ // Usually, using that method is not safe as it does not track renames (group.name does).
+ // However, when called from LoadHook it is safe as there is no way to rename a module
+ // until after the LoadHook has run and the module has been registered.
+ if module.group != nil {
+ return module.group.name
+ } else {
+ return module.logicModule.Name()
+ }
}
func (module *moduleInfo) String() string {
@@ -683,14 +692,18 @@
var scopedModuleFactories map[string]ModuleFactory
var addModule func(module *moduleInfo) []error
- addModule = func(module *moduleInfo) (errs []error) {
- moduleCh <- newModuleInfo{module, addedCh}
- <-addedCh
- var newModules []*moduleInfo
- newModules, errs = runAndRemoveLoadHooks(c, config, module, &scopedModuleFactories)
+ addModule = func(module *moduleInfo) ([]error) {
+ // Run any load hooks immediately before it is sent to the moduleCh and is
+ // registered by name. This allows load hooks to set and/or modify any aspect
+ // of the module (including names) using information that is not available when
+ // the module factory is called.
+ newModules, errs := runAndRemoveLoadHooks(c, config, module, &scopedModuleFactories)
if len(errs) > 0 {
return errs
}
+
+ moduleCh <- newModuleInfo{module, addedCh}
+ <-addedCh
for _, n := range newModules {
errs = addModule(n)
if len(errs) > 0 {