@@ -8,11 +8,13 @@ import (
88 "os"
99 "path/filepath"
1010 "strings"
11+ "sync"
1112
1213 "github.com/jlaffaye/ftp"
1314)
1415
1516type FtpUploader struct {
17+ directoriesMutex sync.RWMutex
1618 PreCreatedDirectories map [string ]bool
1719 authConfig config.AuthCredentials
1820 connQueue chan * ftp.ServerConn
@@ -21,6 +23,7 @@ type FtpUploader struct {
2123
2224func NewFtpUploader (ctx context.Context , authConfig config.AuthCredentials , connectionCount int ) (* FtpUploader , error ) {
2325 uploader := FtpUploader {
26+ directoriesMutex : sync.RWMutex {},
2427 allConnections : make ([]* ftp.ServerConn , 0 ),
2528 connQueue : make (chan * ftp.ServerConn , connectionCount ),
2629 PreCreatedDirectories : make (map [string ]bool ),
@@ -93,6 +96,9 @@ func (uploader *FtpUploader) createDirectoryIfNotExists(conn *ftp.ServerConn, up
9396 directories := strings .Split (uploadFilePathDir , "/" )
9497
9598 for i := range directories {
99+ uploader .directoriesMutex .Lock ()
100+ defer uploader .directoriesMutex .Unlock ()
101+
96102 remoteDir := filepath .Join (directories [:i + 1 ]... )
97103 if uploader .PreCreatedDirectories [remoteDir ] {
98104 continue
0 commit comments