From: Sergey Matveev Date: Thu, 22 Apr 2021 14:33:49 +0000 (+0300) Subject: Merge branch 'develop' X-Git-Tag: v6.4.0^0 X-Git-Url: http://www.git.cypherpunks.ru/?a=commitdiff_plain;h=c0181d88f6dfbc9c9d583c7e5cec1151b92ac775;hp=40e15798f38b14128dadb3a5c1b0fb3d927a042f;p=nncp.git Merge branch 'develop' --- diff --git a/doc/download.texi b/doc/download.texi index b0e4465..4d6f196 100644 --- a/doc/download.texi +++ b/doc/download.texi @@ -25,6 +25,10 @@ Tarballs include all necessary required libraries: @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.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} + @item @ref{Release 6.2.1, 6.2.1} @tab 2021-03-26 @tab 1038 KiB @tab @url{download/nncp-6.2.1.tar.xz, link} @url{download/nncp-6.2.1.tar.xz.sig, sign} @tab @code{D9682D95 4D68025A F5B07516 258D9FFC DA29A4D7 E7E1635B E0C219A1 C5DDB067} diff --git a/doc/news.ru.texi b/doc/news.ru.texi index ea1c700..aa4f62f 100644 --- a/doc/news.ru.texi +++ b/doc/news.ru.texi @@ -1,6 +1,16 @@ @node Новости @section Новости +@node Релиз 6.4.0 +@subsection Релиз 6.4.0 +@itemize + +@item +Исправлена возможная гонка в online протоколе, приводящая к падению +программы. + +@end itemize + @node Релиз 6.3.0 @subsection Релиз 6.3.0 @itemize diff --git a/doc/news.texi b/doc/news.texi index 87be652..67340e2 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -3,6 +3,15 @@ See also this page @ref{Новости, on russian}. +@node Release 6.4.0 +@section Release 6.4.0 +@itemize + +@item +Fixed possible race in online protocol, that lead to panic. + +@end itemize + @node Release 6.3.0 @section Release 6.3.0 @itemize diff --git a/ports/nncp/Makefile b/ports/nncp/Makefile index e2a7e5d..c398830 100644 --- a/ports/nncp/Makefile +++ b/ports/nncp/Makefile @@ -1,7 +1,5 @@ -# $FreeBSD: $ - PORTNAME= nncp -DISTVERSION= 6.3.0 +DISTVERSION= 6.4.0 CATEGORIES= net MASTER_SITES= http://www.nncpgo.org/download/ diff --git a/ports/nncp/files/nncp-caller.in b/ports/nncp/files/nncp-caller.in index 0ab5492..3ae65fb 100644 --- a/ports/nncp/files/nncp-caller.in +++ b/ports/nncp/files/nncp-caller.in @@ -1,7 +1,5 @@ #!/bin/sh -# -# $FreeBSD$ -# + # PROVIDE: nncp-caller # REQUIRE: DAEMON NETWORKING FILESYSTEMS # KEYWORD: shutdown diff --git a/ports/nncp/files/nncp-daemon.in b/ports/nncp/files/nncp-daemon.in index fdc1064..0e9b6dc 100644 --- a/ports/nncp/files/nncp-daemon.in +++ b/ports/nncp/files/nncp-daemon.in @@ -1,7 +1,5 @@ #!/bin/sh -# -# $FreeBSD$ -# + # PROVIDE: nncp-daemon # REQUIRE: DAEMON NETWORKING FILESYSTEMS # KEYWORD: shutdown diff --git a/ports/nncp/files/nncp-toss.in b/ports/nncp/files/nncp-toss.in index 6fbe546..99dc6fc 100644 --- a/ports/nncp/files/nncp-toss.in +++ b/ports/nncp/files/nncp-toss.in @@ -1,7 +1,5 @@ #!/bin/sh -# -# $FreeBSD$ -# + # PROVIDE: nncp-toss # REQUIRE: DAEMON NETWORKING FILESYSTEMS # KEYWORD: shutdown diff --git a/src/nncp.go b/src/nncp.go index 12edaa4..7c1b7c5 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -40,7 +40,7 @@ along with this program. If not, see .` const Base32Encoded32Len = 52 var ( - Version string = "6.3.0" + Version string = "6.4.0" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) diff --git a/src/sp.go b/src/sp.go index e6e4900..6d31375 100644 --- a/src/sp.go +++ b/src/sp.go @@ -233,6 +233,7 @@ type SPState struct { onlyPkts map[[32]byte]bool writeSPBuf bytes.Buffer fds map[string]FdAndFullSize + fdsLock sync.RWMutex fileHashers map[string]*HasherAndOffset checkerQueues SPCheckerQueues sync.RWMutex @@ -669,11 +670,12 @@ func (state *SPState) StartR(conn ConnDeadlined) error { } func (state *SPState) closeFd(pth string) { - s, exists := state.fds[pth] - delete(state.fds, pth) - if exists { + state.fdsLock.Lock() + if s, exists := state.fds[pth]; exists { + delete(state.fds, pth) s.fd.Close() } + state.fdsLock.Unlock() } func (state *SPState) StartWorkers( @@ -914,7 +916,9 @@ func (state *SPState) StartWorkers( string(TTx), Base32Codec.EncodeToString(freq.Hash[:]), ) + state.fdsLock.RLock() fdAndFullSize, exists := state.fds[pth] + state.fdsLock.RUnlock() if !exists { fd, err := os.Open(pth) if err != nil { @@ -931,7 +935,9 @@ func (state *SPState) StartWorkers( return } fdAndFullSize = FdAndFullSize{fd: fd, fullSize: fi.Size()} + state.fdsLock.Lock() state.fds[pth] = fdAndFullSize + state.fdsLock.Unlock() } fd := fdAndFullSize.fd fullSize := fdAndFullSize.fullSize @@ -1352,7 +1358,9 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) { state.Ctx.LogD("sp-file-open", lesp, func(les LEs) string { return logMsg(les) + ": opening part" }) + state.fdsLock.RLock() fdAndFullSize, exists := state.fds[filePathPart] + state.fdsLock.RUnlock() var fd *os.File if exists { fd = fdAndFullSize.fd @@ -1368,7 +1376,9 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) { }) return nil, err } + state.fdsLock.Lock() state.fds[filePathPart] = FdAndFullSize{fd: fd} + state.fdsLock.Unlock() if file.Offset == 0 { h, err := blake2b.New256(nil) if err != nil {