Skip to content

Commit bb40a52

Browse files
committed
Some thread-safety modifications in MacOSThemeDetector
1 parent 40564b9 commit bb40a52

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

src/main/java/com/jthemedetecor/MacOSThemeDetector.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,14 @@ class MacOSThemeDetector extends OsThemeDetector {
3939

4040
private final Set<Consumer<Boolean>> listeners = Collections.synchronizedSet(new HashSet<>());
4141
private final Pattern themeNamePattern = Pattern.compile(".*dark.*", Pattern.CASE_INSENSITIVE);
42+
private final Object iterateLock = new Object();
4243

4344
private final Callback themeChangedCallback = new Callback() {
4445
@SuppressWarnings("unused")
4546
public void callback() {
46-
notifyListeners(isDark());
47+
synchronized (iterateLock) {
48+
notifyListeners(isDark());
49+
}
4750
}
4851
};
4952

@@ -97,12 +100,16 @@ private boolean isDarkTheme(String themeName) {
97100

98101
@Override
99102
public void registerListener(@NotNull Consumer<Boolean> darkThemeListener) {
100-
listeners.add(darkThemeListener);
103+
synchronized (iterateLock) {
104+
listeners.add(darkThemeListener);
105+
}
101106
}
102107

103108
@Override
104109
public void removeListener(@Nullable Consumer<Boolean> darkThemeListener) {
105-
listeners.remove(darkThemeListener);
110+
synchronized (iterateLock) {
111+
listeners.remove(darkThemeListener);
112+
}
106113
}
107114

108115
private void notifyListeners(boolean isDark) {

0 commit comments

Comments
 (0)