@@ -14,16 +14,14 @@ import (
1414 "code.gitea.io/gitea/models/db"
1515 packages_model "code.gitea.io/gitea/models/packages"
1616 container_model "code.gitea.io/gitea/models/packages/container"
17+ "code.gitea.io/gitea/modules/globallock"
1718 "code.gitea.io/gitea/modules/log"
1819 packages_module "code.gitea.io/gitea/modules/packages"
1920 container_module "code.gitea.io/gitea/modules/packages/container"
20- "code.gitea.io/gitea/modules/sync"
2121 "code.gitea.io/gitea/modules/util"
2222 packages_service "code.gitea.io/gitea/services/packages"
2323)
2424
25- var uploadVersionMutex = sync .NewExclusivePool ()
26-
2725// saveAsPackageBlob creates a package blob from an upload
2826// The uploaded blob gets stored in a special upload version to link them to the package/image
2927func saveAsPackageBlob (ctx context.Context , hsr packages_module.HashedSizeReader , pci * packages_service.PackageCreationInfo ) (* packages_model.PackageBlob , error ) { //nolint:unparam
@@ -90,14 +88,20 @@ func mountBlob(ctx context.Context, pi *packages_service.PackageInfo, pb *packag
9088 })
9189}
9290
91+ func containerPkgName (piName string ) string {
92+ return "pkg_container_" + strings .ToLower (piName )
93+ }
94+
9395func getOrCreateUploadVersion (ctx context.Context , pi * packages_service.PackageInfo ) (* packages_model.PackageVersion , error ) {
9496 var uploadVersion * packages_model.PackageVersion
9597
96- // FIXME: Replace usage of mutex with database transaction
97- // https://github.com/go-gitea/gitea/pull/21862
98- uploadVersionMutex .CheckIn (strings .ToLower (pi .Name ))
99- defer uploadVersionMutex .CheckOut (strings .ToLower (pi .Name ))
100- err := db .WithTx (ctx , func (ctx context.Context ) error {
98+ ctx , releaser , err := globallock .Lock (ctx , containerPkgName (pi .Name ))
99+ if err != nil {
100+ return nil , err
101+ }
102+ defer releaser ()
103+
104+ err = db .WithTx (ctx , func (ctx context.Context ) error {
101105 created := true
102106 p := & packages_model.Package {
103107 OwnerID : pi .Owner .ID ,
0 commit comments