From 35f25a934f9a5c948537be3ee0c5903a7ef5f4f6 Mon Sep 17 00:00:00 2001 From: vyzo Date: Thu, 23 Dec 2021 22:05:04 +0200 Subject: [PATCH] add missing done checks in ForChild methods --- scope.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/scope.go b/scope.go index 4fee2a0..2187e5a 100644 --- a/scope.go +++ b/scope.go @@ -394,6 +394,10 @@ func (s *ResourceScope) AddStreamForChild(incount, outcount int) error { s.Lock() defer s.Unlock() + if s.done { + return ErrResourceScopeClosed + } + return s.rc.addStream(incount, outcount) } @@ -401,6 +405,10 @@ func (s *ResourceScope) RemoveStream(dir network.Direction) { s.Lock() defer s.Unlock() + if s.done { + return + } + var incount, outcount int if dir == network.DirInbound { incount = 1 @@ -417,6 +425,11 @@ func (s *ResourceScope) RemoveStream(dir network.Direction) { func (s *ResourceScope) RemoveStreamForChild(incount, outcount int) { s.Lock() defer s.Unlock() + + if s.done { + return + } + s.rc.removeStream(incount, outcount) } @@ -460,6 +473,10 @@ func (s *ResourceScope) AddConnForChild(incount, outcount int) error { s.Lock() defer s.Unlock() + if s.done { + return ErrResourceScopeClosed + } + return s.rc.addConn(incount, outcount) } @@ -467,6 +484,10 @@ func (s *ResourceScope) RemoveConn(dir network.Direction) { s.Lock() defer s.Unlock() + if s.done { + return + } + var incount, outcount int if dir == network.DirInbound { incount = 1 @@ -483,6 +504,11 @@ func (s *ResourceScope) RemoveConn(dir network.Direction) { func (s *ResourceScope) RemoveConnForChild(incount, outcount int) { s.Lock() defer s.Unlock() + + if s.done { + return + } + s.rc.removeConn(incount, outcount) } @@ -490,6 +516,10 @@ func (s *ResourceScope) AddFD(count int) error { s.Lock() defer s.Unlock() + if s.done { + return ErrResourceScopeClosed + } + if err := s.rc.addFD(count); err != nil { return err } @@ -515,6 +545,11 @@ func (s *ResourceScope) AddFD(count int) error { func (s *ResourceScope) AddFDForChild(count int) error { s.Lock() defer s.Unlock() + + if s.done { + return ErrResourceScopeClosed + } + return s.rc.addFD(count) } @@ -522,6 +557,10 @@ func (s *ResourceScope) RemoveFD(count int) { s.Lock() defer s.Unlock() + if s.done { + return + } + s.rc.removeFD(count) for _, cst := range s.constraints { cst.RemoveFDForChild(count) @@ -531,6 +570,11 @@ func (s *ResourceScope) RemoveFD(count int) { func (s *ResourceScope) RemoveFDForChild(count int) { s.Lock() defer s.Unlock() + + if s.done { + return + } + s.rc.removeFD(count) }