mirror of https://github.com/schollz/croc.git
fix race condition
This commit is contained in:
parent
d38fc18390
commit
c1edf24338
|
@ -93,6 +93,7 @@ type Client struct {
|
||||||
CurrentFile *os.File
|
CurrentFile *os.File
|
||||||
CurrentFileChunkRanges []int64
|
CurrentFileChunkRanges []int64
|
||||||
CurrentFileChunks []int64
|
CurrentFileChunks []int64
|
||||||
|
CurrentFileIsClosed bool
|
||||||
|
|
||||||
TotalSent int64
|
TotalSent int64
|
||||||
TotalChunksTransfered int
|
TotalChunksTransfered int
|
||||||
|
@ -738,7 +739,10 @@ func (c *Client) transfer(options TransferOptions) (err error) {
|
||||||
)
|
)
|
||||||
log.Debugf("pathToFile: %s", pathToFile)
|
log.Debugf("pathToFile: %s", pathToFile)
|
||||||
// close if not closed already
|
// close if not closed already
|
||||||
c.CurrentFile.Close()
|
if !c.CurrentFileIsClosed {
|
||||||
|
c.CurrentFile.Close()
|
||||||
|
c.CurrentFileIsClosed = true
|
||||||
|
}
|
||||||
if err := os.Remove(pathToFile); err != nil {
|
if err := os.Remove(pathToFile); err != nil {
|
||||||
log.Warnf("error removing %s: %v", pathToFile, err)
|
log.Warnf("error removing %s: %v", pathToFile, err)
|
||||||
}
|
}
|
||||||
|
@ -1135,6 +1139,7 @@ func (c *Client) recipientGetFileReady(finished bool) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
c.TotalSent = 0
|
c.TotalSent = 0
|
||||||
|
c.CurrentFileIsClosed = false
|
||||||
machID, _ := machineid.ID()
|
machID, _ := machineid.ID()
|
||||||
bRequest, _ := json.Marshal(RemoteFileRequest{
|
bRequest, _ := json.Marshal(RemoteFileRequest{
|
||||||
CurrentFileChunkRanges: c.CurrentFileChunkRanges,
|
CurrentFileChunkRanges: c.CurrentFileChunkRanges,
|
||||||
|
@ -1242,7 +1247,8 @@ func (c *Client) updateIfRecipientHasFileInfo() (err error) {
|
||||||
if !bytes.Equal(fileHash, fileInfo.Hash) {
|
if !bytes.Equal(fileHash, fileInfo.Hash) {
|
||||||
log.Debugf("hashes are not equal %x != %x", fileHash, fileInfo.Hash)
|
log.Debugf("hashes are not equal %x != %x", fileHash, fileInfo.Hash)
|
||||||
if errHash == nil && !c.Options.Overwrite {
|
if errHash == nil && !c.Options.Overwrite {
|
||||||
ans := utils.GetInput(fmt.Sprintf("\rOverwrite '%s'? (y/n) ", path.Join(fileInfo.FolderRemote, fileInfo.Name)))
|
log.Debug("asking to overwrite")
|
||||||
|
ans := utils.GetInput(fmt.Sprintf("\nOverwrite '%s'? (y/n) ", path.Join(fileInfo.FolderRemote, fileInfo.Name)))
|
||||||
if strings.TrimSpace(strings.ToLower(ans)) != "y" {
|
if strings.TrimSpace(strings.ToLower(ans)) != "y" {
|
||||||
fmt.Fprintf(os.Stderr, "skipping '%s'", path.Join(fileInfo.FolderRemote, fileInfo.Name))
|
fmt.Fprintf(os.Stderr, "skipping '%s'", path.Join(fileInfo.FolderRemote, fileInfo.Name))
|
||||||
continue
|
continue
|
||||||
|
@ -1322,6 +1328,7 @@ func (c *Client) updateState() (err error) {
|
||||||
// setup the progressbar
|
// setup the progressbar
|
||||||
c.setBar()
|
c.setBar()
|
||||||
c.TotalSent = 0
|
c.TotalSent = 0
|
||||||
|
c.CurrentFileIsClosed = false
|
||||||
log.Debug("beginning sending comms")
|
log.Debug("beginning sending comms")
|
||||||
pathToFile := path.Join(
|
pathToFile := path.Join(
|
||||||
c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderSource,
|
c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderSource,
|
||||||
|
@ -1411,10 +1418,11 @@ func (c *Client) receiveData(i int) {
|
||||||
c.bar.Add(len(data[8:]))
|
c.bar.Add(len(data[8:]))
|
||||||
c.TotalSent += int64(len(data[8:]))
|
c.TotalSent += int64(len(data[8:]))
|
||||||
c.TotalChunksTransfered++
|
c.TotalChunksTransfered++
|
||||||
if c.TotalChunksTransfered == len(c.CurrentFileChunks) || c.TotalSent == c.FilesToTransfer[c.FilesToTransferCurrentNum].Size {
|
if !c.CurrentFileIsClosed && (c.TotalChunksTransfered == len(c.CurrentFileChunks) || c.TotalSent == c.FilesToTransfer[c.FilesToTransferCurrentNum].Size) {
|
||||||
|
c.CurrentFileIsClosed = true
|
||||||
log.Debug("finished receiving!")
|
log.Debug("finished receiving!")
|
||||||
if err := c.CurrentFile.Close(); err != nil {
|
if err := c.CurrentFile.Close(); err != nil {
|
||||||
log.Errorf("error closing %s: %v", c.CurrentFile.Name(), err)
|
log.Debugf("error closing %s: %v", c.CurrentFile.Name(), err)
|
||||||
}
|
}
|
||||||
if c.Options.Stdout || c.Options.SendingText {
|
if c.Options.Stdout || c.Options.SendingText {
|
||||||
pathToFile := path.Join(
|
pathToFile := path.Join(
|
||||||
|
|
Loading…
Reference in New Issue