Skip to content

Commit cc76bb1

Browse files
committed
Synchronize PaperPermissionManager
1 parent 74ab001 commit cc76bb1

3 files changed

Lines changed: 21 additions & 115 deletions

File tree

shreddedpaper-api/paper-patches/files/src/main/java/org/bukkit/plugin/SimplePluginManager.java.patch

Lines changed: 0 additions & 21 deletions
This file was deleted.

shreddedpaper-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/manager/NormalPaperPermissionManager.java.patch

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 21 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,37 @@
11
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java
22
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java
3-
@@ -108,23 +_,33 @@
3+
@@ -106,7 +_,7 @@
4+
5+
46
@Override
5-
public void subscribeToPermission(@NotNull String permission, @NotNull Permissible permissible) {
7+
- public void subscribeToPermission(@NotNull String permission, @NotNull Permissible permissible) {
8+
+ public synchronized void subscribeToPermission(@NotNull String permission, @NotNull Permissible permissible) { // ShreddedPaper - synchronized
69
String name = permission.toLowerCase(java.util.Locale.ENGLISH);
7-
- Map<Permissible, Boolean> map = this.permSubs().computeIfAbsent(name, k -> new WeakHashMap<>());
8-
-
9-
- map.put(permissible, true);
10-
+ // ShreddedPaper start - thread-safe permission manager
11-
+ this.permSubs().compute(name, (k, map) -> {
12-
+ if (map == null) map = new WeakHashMap<>();
13-
+
14-
+ map.put(permissible, true);
15-
+
16-
+ return map;
17-
+ });
18-
+ // ShreddedPaper end - thread-safe permission manager
10+
Map<Permissible, Boolean> map = this.permSubs().computeIfAbsent(name, k -> new WeakHashMap<>());
11+
12+
@@ -114,7 +_,7 @@
1913
}
2014

2115
@Override
22-
public void unsubscribeFromPermission(@NotNull String permission, @NotNull Permissible permissible) {
16+
- public void unsubscribeFromPermission(@NotNull String permission, @NotNull Permissible permissible) {
17+
+ public synchronized void unsubscribeFromPermission(@NotNull String permission, @NotNull Permissible permissible) { // ShreddedPaper - synchronized
2318
String name = permission.toLowerCase(java.util.Locale.ENGLISH);
24-
- Map<Permissible, Boolean> map = this.permSubs().get(name);
25-
-
26-
- if (map != null) {
27-
- map.remove(permissible);
28-
-
29-
- if (map.isEmpty()) {
30-
- this.permSubs().remove(name);
31-
+ // ShreddedPaper start - thread-safe permission manager
32-
+ this.permSubs().compute(name, (k, map) -> {
33-
+ if (map != null) {
34-
+ map.remove(permissible);
35-
+
36-
+ if (map.isEmpty()) {
37-
+ return null; // this.permSubs().remove(name);
38-
+ }
39-
}
40-
- }
41-
+
42-
+ return map;
43-
+ });
44-
+ // ShreddedPaper end - thread-safe permission manager
19+
Map<Permissible, Boolean> map = this.permSubs().get(name);
20+
21+
@@ -141,14 +_,14 @@
4522
}
4623

4724
@Override
48-
@@ -142,22 +_,32 @@
25+
- public void subscribeToDefaultPerms(boolean op, @NotNull Permissible permissible) {
26+
+ public synchronized void subscribeToDefaultPerms(boolean op, @NotNull Permissible permissible) { // ShreddedPaper - synchronized
27+
Map<Permissible, Boolean> map = this.defSubs().computeIfAbsent(op, k -> new WeakHashMap<>());
4928

50-
@Override
51-
public void subscribeToDefaultPerms(boolean op, @NotNull Permissible permissible) {
52-
- Map<Permissible, Boolean> map = this.defSubs().computeIfAbsent(op, k -> new WeakHashMap<>());
53-
-
54-
- map.put(permissible, true);
55-
+ // ShreddedPaper start - thread-safe permission manager
56-
+ this.defSubs().compute(op, (k, map) -> {
57-
+ if (map == null) map = new WeakHashMap<>();
58-
+
59-
+ map.put(permissible, true);
60-
+
61-
+ return map;
62-
+ });
63-
+ // ShreddedPaper end - thread-safe permission manager
29+
map.put(permissible, true);
6430
}
6531

6632
@Override
67-
public void unsubscribeFromDefaultPerms(boolean op, @NotNull Permissible permissible) {
68-
- Map<Permissible, Boolean> map = this.defSubs().get(op);
69-
-
70-
- if (map != null) {
71-
- map.remove(permissible);
72-
-
73-
- if (map.isEmpty()) {
74-
- this.defSubs().remove(op);
75-
+ // ShreddedPaper start - thread-safe permission manager
76-
+ this.defSubs().compute(op, (k, map) -> {
77-
+ if (map != null) {
78-
+ map.remove(permissible);
79-
+
80-
+ if (map.isEmpty()) {
81-
+ return null; // this.defSubs().remove(op);
82-
+ }
83-
}
84-
- }
85-
+
86-
+ return map;
87-
+ });
88-
+ // ShreddedPaper end - thread-safe permission manager
89-
}
33+
- public void unsubscribeFromDefaultPerms(boolean op, @NotNull Permissible permissible) {
34+
+ public synchronized void unsubscribeFromDefaultPerms(boolean op, @NotNull Permissible permissible) { // ShreddedPaper - synchronized
35+
Map<Permissible, Boolean> map = this.defSubs().get(op);
9036

91-
@Override
37+
if (map != null) {

0 commit comments

Comments
 (0)