mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
MM: 16479: ensure replacement file finishes io.Copy (#12249)
* simplify FileWillBeUploaded * MM-16479: ensure replacement file finishes io.Copy
This commit is contained in:
@@ -395,26 +395,31 @@ func (g *hooksRPCClient) FileWillBeUploaded(c *Context, info *model.FileInfo, fi
|
||||
serveIOReader(file, uploadedFileConnection)
|
||||
}()
|
||||
|
||||
replacementDone := make(chan bool)
|
||||
replacementFileStreamId := g.muxBroker.NextId()
|
||||
go func() {
|
||||
defer close(replacementDone)
|
||||
|
||||
replacementFileConnection, err := g.muxBroker.Accept(replacementFileStreamId)
|
||||
if err != nil {
|
||||
g.log.Error("Plugin failed to serve replacement file stream. MuxBroker could not Accept connection", mlog.Err(err))
|
||||
return
|
||||
}
|
||||
defer replacementFileConnection.Close()
|
||||
if _, err := io.Copy(output, replacementFileConnection); err != nil && err != io.EOF {
|
||||
if _, err := io.Copy(output, replacementFileConnection); err != nil {
|
||||
g.log.Error("Error reading replacement file.", mlog.Err(err))
|
||||
}
|
||||
}()
|
||||
|
||||
_args := &Z_FileWillBeUploadedArgs{c, info, uploadedFileStreamId, replacementFileStreamId}
|
||||
_returns := &Z_FileWillBeUploadedReturns{A: _args.B}
|
||||
if g.implemented[FileWillBeUploadedId] {
|
||||
if err := g.client.Call("Plugin.FileWillBeUploaded", _args, _returns); err != nil {
|
||||
g.log.Error("RPC call FileWillBeUploaded to plugin failed.", mlog.Err(err))
|
||||
}
|
||||
if err := g.client.Call("Plugin.FileWillBeUploaded", _args, _returns); err != nil {
|
||||
g.log.Error("RPC call FileWillBeUploaded to plugin failed.", mlog.Err(err))
|
||||
}
|
||||
|
||||
// Ensure the io.Copy from the replacementFileConnection above completes.
|
||||
<-replacementDone
|
||||
|
||||
return _returns.A, _returns.B
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user