+ FdOODTgts, err = ioutil.TempFile("", "ood-tgts")
+ if err != nil {
+ panic(err)
+ }
+ if err = os.Remove(FdOODTgts.Name()); err != nil {
+ panic(err)
+ }
+ FdOODTgtsLock, err = ioutil.TempFile("", "ood-tgts.lock")
+ if err != nil {
+ panic(err)
+ }
+ if err = os.Remove(FdOODTgtsLock.Name()); err != nil {
+ panic(err)
+ }
+
+ if v := os.Getenv(EnvOODTgtsFd); v != "" {
+ fd := mustParseFd(v, EnvOODTgtsFd)
+ fdLock := mustParseFd(v, EnvOODTgtsLockFd)
+ if err = unix.Flock(int(fdLock.Fd()), unix.LOCK_EX); err != nil {
+ panic(err)
+ }
+ if _, err = fd.Seek(0, io.SeekStart); err != nil {
+ panic(err)
+ }
+ tgtsRaw, err := ioutil.ReadAll(bufio.NewReader(fd))
+ if err != nil {
+ panic(err)
+ }
+ unix.Flock(int(fdLock.Fd()), unix.LOCK_UN)
+ OODTgts = make(map[string]struct{})
+ for _, tgtRaw := range bytes.Split(tgtsRaw, []byte{0}) {
+ t := string(tgtRaw)
+ if t == "" {
+ continue
+ }
+ OODTgts[t] = struct{}{}
+ trace(CDebug, "ood: known to be: %s", t)
+ }
+ }
+