X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=js.go;h=701d26d39683891c0a01762758f3ce63358f1cea;hb=ecb97c9a61e81465fa748b4324da0ddd12872fdc;hp=ccc9fe1d1ab1a9ecaa4f4a202804af09e3dbbde6;hpb=634ee31ae35a2eaac517e0ffa1b7caede4b27ac5;p=goredo.git diff --git a/js.go b/js.go index ccc9fe1..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 @@ -21,6 +21,7 @@ package main import ( "flag" + "fmt" "log" "os" "os/signal" @@ -41,7 +42,7 @@ var ( jsTokens int jsTokensM sync.Mutex - flagJobs = flag.Uint64("j", 1, "number of parallel jobs (0=inf) (REDO_JOBS)") + flagJobs = flag.Int("j", -1, fmt.Sprintf("number of parallel jobs (0=inf, <0=1) (%s)", EnvJobs)) ) func jsInit() { @@ -72,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") @@ -99,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) } } @@ -122,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++