From a951a9623212267cb820eee6dd9af605512f6e01 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Fri, 22 Nov 2019 22:40:43 +0300 Subject: [PATCH] Check disk space when sending --- doc/news.ru.texi | 4 ++++ doc/news.texi | 3 +++ src/tx.go | 17 +++++++++++++---- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/doc/news.ru.texi b/doc/news.ru.texi index e85b0b8..a7508f4 100644 --- a/doc/news.ru.texi +++ b/doc/news.ru.texi @@ -9,6 +9,10 @@ @command{nncp-file} может отправлять директории, автоматически на лету создавая pax архив. +@item +Во время создания исходящих сообщений проверяется наличие свободного +места на файловой системе. + @end itemize @node Релиз 5.0.0 diff --git a/doc/news.texi b/doc/news.texi index e29cf17..2617f96 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -11,6 +11,9 @@ See also this page @ref{Новости, on russian}. @command{nncp-file} can send directories, automatically creating pax archive on the fly. +@item +Free disk space is checked during outbound packets creation. + @end itemize @node Release 5.0.0 diff --git a/src/tx.go b/src/tx.go index 88d4e9a..4b7cb34 100644 --- a/src/tx.go +++ b/src/tx.go @@ -50,10 +50,6 @@ func (ctx *Ctx) Tx( size, minSize int64, src io.Reader, ) (*Node, error) { - tmp, err := ctx.NewTmpFileWHash() - if err != nil { - return nil, err - } hops := make([]*Node, 0, 1+len(node.Via)) hops = append(hops, node) lastNode := node @@ -69,6 +65,14 @@ func (ctx *Ctx) Tx( if padSize < 0 { padSize = 0 } + if !ctx.IsEnoughSpace(size + padSize) { + return nil, errors.New("is not enough space") + } + tmp, err := ctx.NewTmpFileWHash() + if err != nil { + return nil, err + } + errs := make(chan error) curSize := size pipeR, pipeW := io.Pipe() @@ -559,6 +563,11 @@ func (ctx *Ctx) TxTrns(node *Node, nice uint8, size int64, src io.Reader) error "size": strconv.FormatInt(size, 10), } ctx.LogD("tx", sds, "taken") + if !ctx.IsEnoughSpace(size) { + err := errors.New("is not enough space") + ctx.LogE("tx", sds, err.Error()) + return err + } tmp, err := ctx.NewTmpFileWHash() if err != nil { return err -- 2.44.0