diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2018-07-11 08:36:26 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2018-07-11 08:36:26 +0000 |
commit | e68a547bc790d44a1df3c9ae8b07b004ab8dd47e (patch) | |
tree | f459782711e07c75a422891869708df0af944d86 /lib | |
parent | 078c824f3be79720c34bf01b0296b5b773afbf64 (diff) | |
parent | fdfc8d04d2007bd2956e39161b00b1c19cbbadcc (diff) | |
download | gitlab-ce-e68a547bc790d44a1df3c9ae8b07b004ab8dd47e.tar.gz |
Merge branch 'rails5-autoload' into 'master'
[Rails5] Permit concurrent loads
Closes #48263
See merge request gitlab-org/gitlab-ce!20473
Diffstat (limited to 'lib')
-rw-r--r-- | lib/declarative_policy.rb | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/declarative_policy.rb b/lib/declarative_policy.rb index 1dd2855063d..dda6cd38dcd 100644 --- a/lib/declarative_policy.rb +++ b/lib/declarative_policy.rb @@ -21,7 +21,17 @@ module DeclarativePolicy cache = opts[:cache] || {} key = Cache.policy_key(user, subject) - cache[key] ||= class_for(subject).new(user, subject, opts) + cache[key] ||= + if Gitlab.rails5? + # to avoid deadlocks in multi-threaded environment when + # autoloading is enabled, we allow concurrent loads, + # https://gitlab.com/gitlab-org/gitlab-ce/issues/48263 + ActiveSupport::Dependencies.interlock.permit_concurrent_loads do + class_for(subject).new(user, subject, opts) + end + else + class_for(subject).new(user, subject, opts) + end end def class_for(subject) |