Description
Bug report
Describe the bug
Using one supabase client with multiple goroutines and multiple calls to UploadOrUpdateFile()
might cause a race condition to MIMEHeader.Set()
To Reproduce
`
func ProcessUploadImage(){
c, d := storageClient.UploadFile("images", dbImage.externalPath, file, storage_go.FileOptions{
ContentType: &dbImage.format,
})
}
supabase := supabase.CreateClient(SUPABASE_URL, SUPABASE_ANON_KEY)
for i := 0; i < status.Upload; i++ {
go ProcessUploadImage(i, doneChannel, deleteChannel, supabaseStorage)
}
`
Expected behavior
Either documentation to explain the problem or a change to include a mutex
Stdout with -race flag
`
WARNING: DATA RACE
Write at 0x00c000038d20 by goroutine 35:
runtime.mapassign_faststr()
C:/Program Files/Go/src/runtime/map_faststr.go:203 +0x0
net/textproto.MIMEHeader.Set()
C:/Program Files/Go/src/net/textproto/header.go:22 +0x413
net/http.Header.Set()
C:/Program Files/Go/src/net/http/header.go:40 +0x375
github.com/supabase-community/storage-go.(*Client).UploadOrUpdateFile()
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:38 +0x309
github.com/supabase-community/storage-go.(*Client).UploadFile()
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:76 +0x39e
main.UploadImage()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:203 +0x2f2
main.ProcessUploadImage()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:227 +0xc4
main.main.func6()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x5d
Previous write at 0x00c000038d20 by goroutine 36:
runtime.mapassign_faststr()
C:/Program Files/Go/src/runtime/map_faststr.go:203 +0x0
net/textproto.MIMEHeader.Set()
C:/Program Files/Go/src/net/textproto/header.go:22 +0x413
net/http.Header.Set()
C:/Program Files/Go/src/net/http/header.go:40 +0x375
github.com/supabase-community/storage-go.(*Client).UploadOrUpdateFile()
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:38 +0x309
github.com/supabase-community/storage-go.(*Client).UploadFile()
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:76 +0x39e
main.UploadImage()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:203 +0x2f2
main.ProcessUploadImage()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:227 +0xc4
main.main.func6()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x5d
Goroutine 35 (running) created at:
main.main()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x40a
Goroutine 36 (running) created at:
main.main()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x40a
==================
WARNING: DATA RACE
Write at 0x00c00016c200 by goroutine 35:
net/textproto.MIMEHeader.Set()
C:/Program Files/Go/src/net/textproto/header.go:22 +0x424
net/http.Header.Set()
C:/Program Files/Go/src/net/http/header.go:40 +0x375
github.com/supabase-community/storage-go.(*Client).UploadOrUpdateFile()
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:38 +0x309
github.com/supabase-community/storage-go.(*Client).UploadFile()
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:76 +0x39e
main.UploadImage()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:203 +0x2f2
main.ProcessUploadImage()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:227 +0xc4
main.main.func6()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x5d
Previous write at 0x00c00016c200 by goroutine 36:
net/textproto.MIMEHeader.Set()
C:/Program Files/Go/src/net/textproto/header.go:22 +0x424
net/http.Header.Set()
C:/Program Files/Go/src/net/http/header.go:40 +0x375
github.com/supabase-community/storage-go.(*Client).UploadOrUpdateFile()
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:38 +0x309
github.com/supabase-community/storage-go.(*Client).UploadFile()
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:76 +0x39e
main.UploadImage()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:203 +0x2f2
main.ProcessUploadImage()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:227 +0xc4
main.main.func6()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x5d
Goroutine 35 (running) created at:
main.main()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x40a
Goroutine 36 (running) created at:
main.main()
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x40a
fatal error: concurrent map writes
goroutine 37 [running]:
net/textproto.MIMEHeader.Set(...)
C:/Program Files/Go/src/net/textproto/header.go:22
net/http.Header.Set(...)
C:/Program Files/Go/src/net/http/header.go:40
github.com/supabase-community/storage-go.(*Client).UploadOrUpdateFile(0xc000172000, {0x1406238be, 0x6}, {0xc000582640, 0x36}, {0x1406ce080?, 0xc00008c000}, 0x0, {0xc00076fd70, 0x1, ...})
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:38 +0x414
github.com/supabase-community/storage-go.(*Client).UploadFile(...)
C:/Users/hawai/go/pkg/mod/github.com/supabase-community/[email protected]/storage.go:76
main.UploadImage({{0xc000702400, 0x40}, {0xc000582640, 0x36}, 0x63a69, {0xc000624196, 0xa}}, 0x0?)
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:203 +0x39f
main.ProcessUploadImage(0x0?, 0x0?, 0x0?, 0x0?)
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:227 +0xc5
created by main.main in goroutine 1
C:/Users/hawai/OneDrive/Skrivbord/Projects/ULTRA/Veckans300/go/main.go:433 +0x40b
`