Skip to content

Commit 56c95f7

Browse files
committed
Make ScriptManager.scriptHandlersTable atomic
1 parent f8dc823 commit 56c95f7

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

CotEditor/Sources/ScriptManager.swift

+6-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// ---------------------------------------------------------------------------
1010
//
1111
// © 2004-2007 nakamuxu
12-
// © 2014-2023 1024jp
12+
// © 2014-2024 1024jp
1313
//
1414
// Licensed under the Apache License, Version 2.0 (the "License");
1515
// you may not use this file except in compliance with the License.
@@ -45,8 +45,8 @@ final class ScriptManager: NSObject, NSFilePresenter {
4545
// MARK: Private Properties
4646

4747
private var scriptsDirectoryURL: URL?
48-
private var scriptHandlersTable: [ScriptingEventType: [any EventScript]] = [:]
4948
private var currentContext: String? { didSet { Task { await self.applyShortcuts() } } }
49+
@Atomic private var scriptHandlersTable: [ScriptingEventType: [any EventScript]] = [:]
5050

5151
private var debounceTask: Task<Void, any Error>?
5252
private var syntaxObserver: AnyCancellable?
@@ -222,7 +222,7 @@ final class ScriptManager: NSObject, NSFilePresenter {
222222
@MainActor private func buildScriptMenu() async {
223223

224224
self.debounceTask?.cancel()
225-
self.scriptHandlersTable.removeAll()
225+
self.$scriptHandlersTable.mutate { $0.removeAll() }
226226

227227
guard let directoryURL = self.scriptsDirectoryURL else { return }
228228

@@ -232,7 +232,9 @@ final class ScriptManager: NSObject, NSFilePresenter {
232232
let eventScripts = scriptMenuItems.flatMap(\.scripts)
233233
.compactMap { $0 as? any EventScript }
234234
for type in ScriptingEventType.allCases {
235-
self.scriptHandlersTable[type] = eventScripts.filter { $0.eventTypes.contains(type) }
235+
self.$scriptHandlersTable.mutate {
236+
$0[type] = eventScripts.filter { $0.eventTypes.contains(type) }
237+
}
236238
}
237239

238240
let menuItems = scriptMenuItems.map { $0.menuItem(action: #selector(launchScript), target: self) }

0 commit comments

Comments
 (0)