"fmt"
"log"
"os"
- "os/signal"
"regexp"
"strconv"
"sync"
- "syscall"
)
const (
jsTokens map[byte]int
jsTokensM sync.Mutex
- flagJobs = flag.Int("j", -1, fmt.Sprintf("number of parallel jobs (0=inf, <0=1) (%s)", EnvJobs))
+ flagJobs *int
)
+func init() {
+ cmdName := CmdName()
+ if !(cmdName == CmdNameRedo || cmdName == CmdNameRedoIfchange) {
+ return
+ }
+ flagJobs = flag.Int("j", -1,
+ fmt.Sprintf("number of parallel jobs (0=inf, <0=1) (%s)", EnvJobs))
+}
+
func jsStart(jobsEnv string) {
jobs := uint64(1)
var err error
jsTokens[jsToken]++
jsRelease("ifchange entered", jsToken)
}
-
- killed := make(chan os.Signal, 0)
- signal.Notify(killed, syscall.SIGTERM, syscall.SIGINT)
- go func() {
- <-killed
- jsTokensM.Lock()
- for token, i := range jsTokens {
- for ; i > 0; i-- {
- jsReleaseNoLock(token)
- }
- }
- jsTokensM.Unlock()
- os.Exit(1)
- }()
}
func jsReleaseNoLock(token byte) {
jsTokensM.Unlock()
}
+func jsReleaseAll() {
+ jsTokensM.Lock()
+ for token, i := range jsTokens {
+ for ; i > 0; i-- {
+ jsReleaseNoLock(token)
+ }
+ }
+ jsTokensM.Unlock()
+}
+
func jsAcquire(ctx string) byte {
if JSR == nil {
return BMakeGoodToken