]> Cypherpunks.ru repositories - goredo.git/blobdiff - js.go
Download link for 1.2.0 release
[goredo.git] / js.go
diff --git a/js.go b/js.go
index d160c1091a28995a471c2e6ae2b30de83276daf1..701d26d39683891c0a01762758f3ce63358f1cea 100644 (file)
--- a/js.go
+++ b/js.go
@@ -1,6 +1,6 @@
 /*
-goredo -- redo implementation on pure Go
-Copyright (C) 2020 Sergey Matveev <stargrave@stargrave.org>
+goredo -- djb's redo implementation on pure Go
+Copyright (C) 2020-2021 Sergey Matveev <stargrave@stargrave.org>
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -42,7 +42,7 @@ var (
        jsTokens  int
        jsTokensM sync.Mutex
 
-       flagJobs = flag.Uint64("j", 1, fmt.Sprintf("number of parallel jobs (0=inf) (%s)", EnvJobs))
+       flagJobs = flag.Int("j", -1, fmt.Sprintf("number of parallel jobs (0=inf, <0=1) (%s)", EnvJobs))
 )
 
 func jsInit() {
@@ -73,25 +73,26 @@ func jsInit() {
                return
        }
 
-       var jobs uint64
-       if v := os.Getenv(EnvJobs); v != "" {
-               var err error
+       jobs := uint64(1)
+       var err error
+       if *flagJobs == 0 {
+               jobs = 0
+       } else if *flagJobs > 0 {
+               jobs = uint64(*flagJobs)
+       } else if v := os.Getenv(EnvJobs); v != "" {
                jobs, err = strconv.ParseUint(v, 10, 64)
                if err != nil {
                        log.Fatalln("can not parse", EnvJobs, err)
                }
-       } else {
-               jobs = *flagJobs
        }
        if jobs == 0 {
                // infinite jobs
                return
        }
 
-       var err error
        JSR, JSW, err = os.Pipe()
        if err != nil {
-               panic(err)
+               log.Fatalln(err)
        }
        for i := uint64(0); i < jobs; i++ {
                jsRelease("initial fill")
@@ -100,7 +101,7 @@ func jsInit() {
 
 func jsReleaseNoLock() {
        if n, err := JSW.Write([]byte{0}); err != nil || n != 1 {
-               panic("can not write JSW")
+               log.Fatalln("can not write JSW:", err)
        }
 }
 
@@ -123,7 +124,7 @@ func jsAcquire(ctx string) {
        }
        trace(CJS, "acquire for %s", ctx)
        if n, err := JSR.Read([]byte{0}); err != nil || n != 1 {
-               panic("can not read JSR")
+               log.Fatalln("can not read JSR:", err)
        }
        jsTokensM.Lock()
        jsTokens++