"io/ioutil"
"log"
"os"
+ "os/signal"
"path"
"path/filepath"
"runtime"
"sort"
"strconv"
+ "syscall"
"go.cypherpunks.ru/recfile"
"golang.org/x/sys/unix"
}
os.Exit(rc)
}
- log.SetFlags(0)
+ log.SetFlags(log.Lshortfile)
var err error
Cwd, err = os.Getwd()
// Those are internal envs
FdOODTgts, err = ioutil.TempFile("", "ood-tgts")
if err != nil {
- panic(err)
+ log.Fatalln(err)
}
if err = os.Remove(FdOODTgts.Name()); err != nil {
- panic(err)
+ log.Fatalln(err)
}
FdOODTgtsLock, err = ioutil.TempFile("", "ood-tgts.lock")
if err != nil {
- panic(err)
+ log.Fatalln(err)
}
if err = os.Remove(FdOODTgtsLock.Name()); err != nil {
- panic(err)
+ log.Fatalln(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)
+ log.Fatalln(err)
}
if _, err = fd.Seek(0, io.SeekStart); err != nil {
- panic(err)
+ log.Fatalln(err)
}
tgtsRaw, err := ioutil.ReadAll(bufio.NewReader(fd))
if err != nil {
- panic(err)
+ log.Fatalln(err)
}
unix.Flock(int(fdLock.Fd()), unix.LOCK_UN)
OODTgts = map[string]struct{}{}
}
}
+ killed := make(chan os.Signal, 0)
+ signal.Notify(killed, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
+ go func() {
+ <-killed
+ trace(CDebug, "[%s] killed", BuildUUID)
+ jsReleaseAll()
+ RunningProcsM.Lock()
+ for pid, proc := range RunningProcs {
+ trace(CDebug, "[%s] killing child %d", BuildUUID, pid)
+ proc.Signal(syscall.SIGTERM)
+ }
+ os.Exit(1)
+ }()
+
ok := true
err = nil
trace(
log.Fatalln("no", EnvDepFd)
}
for _, tgt := range tgts {
- err = ifcreate(fdDep, tgt)
+ tgtRel, err := filepath.Rel(
+ filepath.Join(Cwd, DirPrefix),
+ filepath.Join(Cwd, tgt),
+ )
+ if err != nil {
+ break
+ }
+ err = ifcreate(fdDep, tgtRel)
if err != nil {
break
}