doc/download.texi | 4 ++++ doc/news.ru.texi | 21 +++++++++++++++++++++ doc/news.texi | 20 ++++++++++++++++++++ ports/nncp/Makefile | 2 +- src/cmd/nncp-bundle/main.go | 1 + src/cmd/nncp-call/main.go | 1 + src/cmd/nncp-caller/main.go | 1 + src/cmd/nncp-cfgenc/main.go | 1 + src/cmd/nncp-cfgmin/main.go | 1 + src/cmd/nncp-cfgnew/main.go | 2 ++ src/cmd/nncp-check/main.go | 1 + src/cmd/nncp-cronexpr/main.go | 1 + src/cmd/nncp-daemon/main.go | 11 ++++++++--- src/cmd/nncp-exec/main.go | 1 + src/cmd/nncp-file/main.go | 1 + src/cmd/nncp-freq/main.go | 1 + src/cmd/nncp-log/main.go | 1 + src/cmd/nncp-pkt/main.go | 1 + src/cmd/nncp-reass/main.go | 1 + src/cmd/nncp-rm/main.go | 1 + src/cmd/nncp-stat/main.go | 1 + src/cmd/nncp-toss/main.go | 1 + src/cmd/nncp-xfer/main.go | 1 + src/nncp.go | 2 +- src/progress.go | 10 ++++++++++ src/sp.go | 41 ++++++++++++++++++++++++++++++----------- src/toss.go | 2 +- diff --git a/doc/download.texi b/doc/download.texi index 96d01c014ffcc7978a3f0e96e30afbf71b9d19d0ed73a3232f0db3362f021a98..61e24024e7c64014db0bf5defd042fd6e80ed671a5a8ed68d20f9a3f5ab48ce3 100644 --- a/doc/download.texi +++ b/doc/download.texi @@ -25,6 +25,10 @@ @multitable {XXXXX} {XXXX-XX-XX} {XXXX KiB} {link sign} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} @headitem Version @tab Date @tab Size @tab Tarball @tab SHA256 checksum +@item @ref{Release 6.4.0, 6.4.0} @tab 2021-04-22 @tab 1042 KiB +@tab @url{download/nncp-6.4.0.tar.xz, link} @url{download/nncp-6.4.0.tar.xz.sig, sign} +@tab @code{3D0D1156 D69AF698 D402663C F84E51CC 3D40A50D 300E34D1 105A6F75 32E4B99B} + @item @ref{Release 6.3.0, 6.3.0} @tab 2021-04-14 @tab 1042 KiB @tab @url{download/nncp-6.3.0.tar.xz, link} @url{download/nncp-6.3.0.tar.xz.sig, sign} @tab @code{76C26A11 E3423540 BB7B8470 820176A3 5FCD0493 B21A872E C223EB94 43BA466B} diff --git a/doc/news.ru.texi b/doc/news.ru.texi index f1ba327762bedbe17ec5dee92f84d92dfd98dc846657deb5992123ecf9749063..98f1bebda2e757b8c904f244008e4a0e9c9b86ce43fa40315525eaeb8d5bafae 100644 --- a/doc/news.ru.texi +++ b/doc/news.ru.texi @@ -1,6 +1,27 @@ @node Новости @section Новости +@node Релиз 6.5.0 +@subsection Релиз 6.5.0 +@itemize + +@item +Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно. + +@item +Исправлено возможное игнорирование плохого кода возврата автоматического tosser. + +@item +Исправлена гонка при закрытии файловых дескрипторов во время завершения +работы online протокола, которая могла привести к ошибке записи +принятого фрагмента пакета. + +@item +Убирать показ прогресса передачи пакетов когда вызов уже завершён в +@command{nncp-daemon}, @command{nncp-call} and @command{nncp-caller}. + +@end itemize + @node Релиз 6.4.0 @subsection Релиз 6.4.0 @itemize diff --git a/doc/news.texi b/doc/news.texi index d4cdc73ef7a2a8e8b87b6ac2d430d491bc346ee673b4f2ac44e74f110cddf7f1..4620d4817e41e807e3f364271e8ce25ff21243af1738d1932ec7072ca0576c97 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -3,6 +3,26 @@ @unnumbered News See also this page @ref{Новости, on russian}. +@node Release 6.5.0 +@section Release 6.5.0 +@itemize + +@item +Fixed segfault in @command{nncp-daemon} when SP handshake did not succeed. + +@item +Fixed possible bad return code ignoring in automatic tosser. + +@item +Fixed race during file descriptors closing when online protocol call is +finished, that could lead to write error of received packet fragment. + +@item +Kill all packet transmission progress bars in @command{nncp-daemon}, +@command{nncp-call} and @command{nncp-caller} when call is finished. + +@end itemize + @node Release 6.4.0 @section Release 6.4.0 @itemize diff --git a/ports/nncp/Makefile b/ports/nncp/Makefile index 6eb6c077c8539fad7d4d7a47d2aef9d1dec0b494d139b664cddbfdd927dc82ba..4907ba4617086c5552b96aa11d7105134a0a3daf343c2bb1d1a7b62a17154a39 100644 --- a/ports/nncp/Makefile +++ b/ports/nncp/Makefile @@ -1,5 +1,5 @@ PORTNAME= nncp -DISTVERSION= 6.4.0 +DISTVERSION= 6.5.0 CATEGORIES= net MASTER_SITES= http://www.nncpgo.org/download/ diff --git a/src/cmd/nncp-bundle/main.go b/src/cmd/nncp-bundle/main.go index c3e185a123ee9634a5d561adde05791485d8c7cc61877675bd3e04d0fb2135f1..abb5add2a4a879ac24485b4f7a737637aae030babe97440d071e2c59ba4bc217 100644 --- a/src/cmd/nncp-bundle/main.go +++ b/src/cmd/nncp-bundle/main.go @@ -70,6 +70,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-call/main.go b/src/cmd/nncp-call/main.go index 238729ee4c6b8f15a26ece168bc4ebd818deed30d2655ccdd2c599343c37aa0b..c128938f695f2418e9784c9c3d98974773422954f04b3193a739ef418f6b5e08 100644 --- a/src/cmd/nncp-call/main.go +++ b/src/cmd/nncp-call/main.go @@ -67,6 +67,7 @@ autoTossNoFreq = flag.Bool("autotoss-nofreq", false, "Do not process \"freq\" packets during tossing") autoTossNoExec = flag.Bool("autotoss-noexec", false, "Do not process \"exec\" packets during tossing") autoTossNoTrns = flag.Bool("autotoss-notrns", false, "Do not process \"trns\" packets during tossing") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-caller/main.go b/src/cmd/nncp-caller/main.go index a8493c91af7996e30995644414557a1b501471feb51ce5e9573bf994d030037a..c641928428a48d0cacaa97df93ed2e4ae398660284c2aa3f37dbcd217f184bd4 100644 --- a/src/cmd/nncp-caller/main.go +++ b/src/cmd/nncp-caller/main.go @@ -57,6 +57,7 @@ autoTossNoFreq = flag.Bool("autotoss-nofreq", false, "Do not process \"freq\" packets during tossing") autoTossNoExec = flag.Bool("autotoss-noexec", false, "Do not process \"exec\" packets during tossing") autoTossNoTrns = flag.Bool("autotoss-notrns", false, "Do not process \"trns\" packets during tossing") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-cfgenc/main.go b/src/cmd/nncp-cfgenc/main.go index e2d3f9e977f837097b395900446419d2f138e423077bff55623ce59e35302c22..12c5d71e604dc8c5a036ece0e49a288e43f61ee66976d64639e3941eacfdddd8 100644 --- a/src/cmd/nncp-cfgenc/main.go +++ b/src/cmd/nncp-cfgenc/main.go @@ -53,6 +53,7 @@ pOpt = flag.Int("p", nncp.DefaultP, "Balloon number of parallel jobs") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-cfgmin/main.go b/src/cmd/nncp-cfgmin/main.go index 37527a38526c2887500d1c32ff575bc696ab34abc61c1d0ebd275a40c42f6331..be353db14721cfbb0c2618233edc6216360e6da061ae5191ac62fc7585c3b925 100644 --- a/src/cmd/nncp-cfgmin/main.go +++ b/src/cmd/nncp-cfgmin/main.go @@ -41,6 +41,7 @@ cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-cfgnew/main.go b/src/cmd/nncp-cfgnew/main.go index 7cc41c18c992b7e0631f7e7d87c507a9a888ab4bfd3f7f30aec46a640f7afa71..b615a712955a9062a88fc1280329399404dbe3bcad36aa2b1ab2f147798f6de1 100644 --- a/src/cmd/nncp-cfgnew/main.go +++ b/src/cmd/nncp-cfgnew/main.go @@ -21,6 +21,7 @@ import ( "flag" "fmt" + "log" "os" "go.cypherpunks.ru/nncp/v6" @@ -38,6 +39,7 @@ noComments = flag.Bool("nocomments", false, "Do not include descriptive comments") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-check/main.go b/src/cmd/nncp-check/main.go index 201bb462a40ad99e6729a2a84939cc781b85c34e2ddd7439bb828ad6c633d705..de88e8d33aa4301f43dcbbc0b4ff18597e17aa409a0b5ebb913f80a275067a9a 100644 --- a/src/cmd/nncp-check/main.go +++ b/src/cmd/nncp-check/main.go @@ -49,6 +49,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-cronexpr/main.go b/src/cmd/nncp-cronexpr/main.go index f904ef052ff2f24f47df9add1faacbbebb0eee859c697b5607b354c4230bf37a..2d0d98190d1281ee1709e47bfcd6673d698f072e6d4a13ff11637c0025db4e07 100644 --- a/src/cmd/nncp-cronexpr/main.go +++ b/src/cmd/nncp-cronexpr/main.go @@ -43,6 +43,7 @@ num = flag.Uint("num", 10, "Number of future entries to print") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-daemon/main.go b/src/cmd/nncp-daemon/main.go index 889f04d0075d8c91b1dc162bcfe51aa3eb414694ed39d86a3b5d94b72fadc549..ac2f576498c21dd710799898a64d739b48a212259a95de82ac22cb1a5829d2f0 100644 --- a/src/cmd/nncp-daemon/main.go +++ b/src/cmd/nncp-daemon/main.go @@ -108,17 +108,21 @@ humanize.IBytes(uint64(state.TxSpeed)), ) }) } else { - nodeId := "unknown" + var nodeId string + var nodeName string if state.Node == nil { + nodeId = "unknown" + nodeName = "unknown" nodeIdC <- nil } else { + nodeId = state.Node.Id.String() + nodeName = state.Node.Name nodeIdC <- state.Node.Id - nodeId = state.Node.Id.String() } ctx.LogI( "call-started", nncp.LEs{{K: "Node", V: nodeId}}, - func(les nncp.LEs) string { return "Connected to " + state.Node.Name }, + func(les nncp.LEs) string { return "Connected to " + nodeName }, ) } close(nodeIdC) @@ -148,6 +152,7 @@ autoTossNoFreq = flag.Bool("autotoss-nofreq", false, "Do not process \"freq\" packets during tossing") autoTossNoExec = flag.Bool("autotoss-noexec", false, "Do not process \"exec\" packets during tossing") autoTossNoTrns = flag.Bool("autotoss-notrns", false, "Do not process \"trns\" packets during tossing") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-exec/main.go b/src/cmd/nncp-exec/main.go index ecd547f7e6ff8fa1960c69dc6dd1d34d82a77bb330f6cc2b11789542837121df..b714d6af8336a3d81dd3e241f3fbebeca885cfaaed266c24c8b4796933d6736e 100644 --- a/src/cmd/nncp-exec/main.go +++ b/src/cmd/nncp-exec/main.go @@ -53,6 +53,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-file/main.go b/src/cmd/nncp-file/main.go index e5fb93182da8dce9e173e422e75337112f5720cdb577af19cdc2231165f0d014..4a213faa619cb88618762e02bead15208968a5d63a925f2c3d6df4abb92adbfd 100644 --- a/src/cmd/nncp-file/main.go +++ b/src/cmd/nncp-file/main.go @@ -57,6 +57,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-freq/main.go b/src/cmd/nncp-freq/main.go index 14710a1402f89af3de96002c28cf7828c092da41f04b806fab69723aa3cef662..423effe23ede024f6c13f000b28b503c32ad0a91e439a9806f9e32f7ec3fb59a 100644 --- a/src/cmd/nncp-freq/main.go +++ b/src/cmd/nncp-freq/main.go @@ -52,6 +52,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-log/main.go b/src/cmd/nncp-log/main.go index 5ede97e3ee47390a3bb1efd913ef7b2639d64a99c4a66da5638c0ad3e7483efe..fd061e858459228a460189ffb82d7cd8a1036ff20363cee5df6afdf67429f9a3 100644 --- a/src/cmd/nncp-log/main.go +++ b/src/cmd/nncp-log/main.go @@ -44,6 +44,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-pkt/main.go b/src/cmd/nncp-pkt/main.go index 980ea2976231a880c52c9129f277dd2062357c7a8039865f7ff30e753dcc80cc..dd480fb3f0eda4d3f44cd2b839229e15763ee0f03b95b3315d04cea640a2ea46 100644 --- a/src/cmd/nncp-pkt/main.go +++ b/src/cmd/nncp-pkt/main.go @@ -49,6 +49,7 @@ cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-reass/main.go b/src/cmd/nncp-reass/main.go index 5a17b1de5eb11f526f962a07d9df625bf602b69be0a8d1375644f8cf1c45e070..94b76c4827d87c06048864bf3ffaf8cffc9a5a9a1105b9fb27184f3e615c2350 100644 --- a/src/cmd/nncp-reass/main.go +++ b/src/cmd/nncp-reass/main.go @@ -330,6 +330,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-rm/main.go b/src/cmd/nncp-rm/main.go index b084ddf9b0aa9c271215d152564da2a8b70e622694f690c22b49d982edfd800c..aab68bb28e637c1bf80325dfbecafacdc302d8117ccbc6ae8cdcc2bb030718b8 100644 --- a/src/cmd/nncp-rm/main.go +++ b/src/cmd/nncp-rm/main.go @@ -69,6 +69,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-stat/main.go b/src/cmd/nncp-stat/main.go index 56c0d4c1b6b61a964ffe9c5c1214554ae87f4e33ad2047040fc23d9cc8e38053..fb78a0d90d724d56ac13e954fe5e0c8bd7d925865080e555cd8faeb300213e6d 100644 --- a/src/cmd/nncp-stat/main.go +++ b/src/cmd/nncp-stat/main.go @@ -56,6 +56,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-toss/main.go b/src/cmd/nncp-toss/main.go index 108780b7e98fa2ab38cb945e3ab09fdf1ad3144b870741052fbad96e74b24ccf..a3288613f6ffad8f0052af4ca327236f3f6bd24f6707941e044c48c3600b98c7 100644 --- a/src/cmd/nncp-toss/main.go +++ b/src/cmd/nncp-toss/main.go @@ -56,6 +56,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/cmd/nncp-xfer/main.go b/src/cmd/nncp-xfer/main.go index 48f07d7ab57199d7220ff0cba6f64cc5de686d9df6480816a3e243d8a6b0090a..74884e9d3e35aaf13d9e141ed682e6e21799e9012275946a4ef7ed57a5b8f80d 100644 --- a/src/cmd/nncp-xfer/main.go +++ b/src/cmd/nncp-xfer/main.go @@ -57,6 +57,7 @@ debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { diff --git a/src/nncp.go b/src/nncp.go index dc521689d050a4aa7cbc2f3732c92db3c13256bab8a457ca71fb38f19d53aacb..4330af9bf07f4b4199c4ac6718fe7ddccd0958f7938745681a1dbfb9d8f96eda 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -40,7 +40,7 @@ const Base32Encoded32Len = 52 var ( - Version string = "6.4.0" + Version string = "6.5.0" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) diff --git a/src/progress.go b/src/progress.go index 3d8307c8f81725dd11a848ade42cbb288c4441dccd3c81bd0d104d9e0366baf4..875b39510d4984dc192aa398d80e75673febabbde38ba21cedfdbb8f900484d2 100644 --- a/src/progress.go +++ b/src/progress.go @@ -153,3 +153,13 @@ delete(progressBars, pkt) progressBarsLock.Unlock() } } + +func ProgressKill(pkt string) { + progressBarsLock.Lock() + pb, exists := progressBars[pkt] + if exists { + pb.Kill() + delete(progressBars, pkt) + } + progressBarsLock.Unlock() +} diff --git a/src/sp.go b/src/sp.go index f95cebe7114baec147ce7b7f909098bd968360354c8c89ce3d13223d4b9ec1d1..20fac709de09e812b85a2b2affb5946ecc582c01f35fb8da494798291bc300cf 100644 --- a/src/sp.go +++ b/src/sp.go @@ -236,6 +236,7 @@ fds map[string]FdAndFullSize fdsLock sync.RWMutex fileHashers map[string]*HasherAndOffset checkerQueues SPCheckerQueues + progressBars map[string]struct{} sync.RWMutex } @@ -255,11 +256,6 @@ } }() go func() { for range state.pings { - } - }() - go func() { - for _, s := range state.fds { - s.fd.Close() } }() } @@ -441,6 +437,7 @@ state.payloads = make(chan []byte) state.pings = make(chan struct{}) state.infosTheir = make(map[[32]byte]*SPInfo) state.infosOurSeen = make(map[[32]byte]uint8) + state.progressBars = make(map[string]struct{}) state.started = started state.rxLock = rxLock state.txLock = txLock @@ -558,6 +555,7 @@ state.payloads = make(chan []byte) state.pings = make(chan struct{}) state.infosOurSeen = make(map[[32]byte]uint8) state.infosTheir = make(map[[32]byte]*SPInfo) + state.progressBars = make(map[string]struct{}) state.started = started state.xxOnly = xxOnly @@ -792,13 +790,20 @@ deadlineTicker.Stop() pingTicker.Stop() return case now := <-deadlineTicker.C: - if (now.Sub(state.RxLastNonPing) >= state.onlineDeadline && - now.Sub(state.TxLastNonPing) >= state.onlineDeadline) || - (state.maxOnlineTime > 0 && state.mustFinishAt.Before(now)) || - (now.Sub(state.RxLastSeen) >= 2*PingTimeout) { - state.SetDead() - conn.Close() // #nosec G104 + if now.Sub(state.RxLastNonPing) >= state.onlineDeadline && + now.Sub(state.TxLastNonPing) >= state.onlineDeadline { + goto Deadlined + } + if state.maxOnlineTime > 0 && state.mustFinishAt.Before(now) { + goto Deadlined + } + if now.Sub(state.RxLastSeen) >= 2*PingTimeout { + goto Deadlined } + break + Deadlined: + state.SetDead() + conn.Close() // #nosec G104 case now := <-pingTicker.C: if now.After(state.TxLastSeen.Add(PingTimeout)) { state.wg.Add(1) @@ -989,6 +994,7 @@ LE{"Size", int64(ourSize)}, LE{"FullSize", fullSize}, ) if state.Ctx.ShowPrgrs { + state.progressBars[pktName] = struct{}{} Progress("Tx", lesp) } state.Lock() @@ -1001,6 +1007,9 @@ if len(state.queueTheir) > 1 { state.queueTheir = state.queueTheir[1:] } else { state.queueTheir = state.queueTheir[:0] + } + if state.Ctx.ShowPrgrs { + delete(state.progressBars, pktName) } } else { state.queueTheir[0].freq.Offset += uint64(len(buf)) @@ -1138,6 +1147,12 @@ } if txDuration > 0 { state.TxSpeed = state.TxBytes / txDuration } + for _, s := range state.fds { + s.fd.Close() + } + for pktName := range state.progressBars { + ProgressKill(pktName) + } } func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) { @@ -1439,10 +1454,14 @@ fullsize = int64(infoTheir.Size) } lesp = append(lesp, LE{"FullSize", fullsize}) if state.Ctx.ShowPrgrs { + state.progressBars[pktName] = struct{}{} Progress("Rx", lesp) } if fullsize != ourSize { continue + } + if state.Ctx.ShowPrgrs { + delete(state.progressBars, pktName) } logMsg = func(les LEs) string { return fmt.Sprintf( diff --git a/src/toss.go b/src/toss.go index d11506aa9fa268af0b3654e705ba00671551d879271859f46c9588b0f6db1b98..227c4eaae356c52df4050d34fdfa6aac5d695338139caae7a53ee5e34dffd85d 100644 --- a/src/toss.go +++ b/src/toss.go @@ -689,7 +689,7 @@ break default: } time.Sleep(time.Second) - bad = !ctx.Toss(nodeId, nice, false, doSeen, noFile, noFreq, noExec, noTrns) + bad = !ctx.Toss(nodeId, nice, false, doSeen, noFile, noFreq, noExec, noTrns) || bad } }() return finish, badCode