X-Git-Url: http://www.git.cypherpunks.ru/?p=goredo.git;a=blobdiff_plain;f=js.go;h=701d26d39683891c0a01762758f3ce63358f1cea;hp=d160c1091a28995a471c2e6ae2b30de83276daf1;hb=ce96a1c785b32af13264225c0bf7ae8370a5af21;hpb=66de71f560cd772e7ef9e9cf1182ce67e495b1ec diff --git a/js.go b/js.go index d160c10..701d26d 100644 --- a/js.go +++ b/js.go @@ -1,6 +1,6 @@ /* -goredo -- redo implementation on pure Go -Copyright (C) 2020 Sergey Matveev +goredo -- djb's redo implementation on pure Go +Copyright (C) 2020-2021 Sergey Matveev 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++