Skip to content

Commit c48773a

Browse files
committed
Make event sync pub sub concurrent safe
1 parent a9bd53c commit c48773a

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

Diff for: language-server/modules/langserver-core/src/main/java/org/ballerinalang/langserver/eventsync/EventSyncPubSubHolder.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
* @since 2201.1.1
3636
*/
3737
public class EventSyncPubSubHolder {
38+
3839
private static final LanguageServerContext.Key<EventSyncPubSubHolder> SUBSCRIBERS_HOLDER_KEY =
3940
new LanguageServerContext.Key<>();
4041
private static final Map<EventKind, EventPublisher> publisherMap = new HashMap<>();
@@ -56,8 +57,8 @@ private void initialize(LSClientLogger lsClientLogger) {
5657

5758
ServiceLoader<EventPublisher> publishers = ServiceLoader.load(EventPublisher.class);
5859
publishers.forEach(eventPublisher -> {
59-
for (EventSubscriber eventSubscriber: eventSubscribersMap.get(eventPublisher.getKind())) {
60-
publisherMap.put(eventPublisher.getKind(), eventPublisher);
60+
publisherMap.put(eventPublisher.getKind(), eventPublisher);
61+
for (EventSubscriber eventSubscriber : eventSubscribersMap.get(eventPublisher.getKind())) {
6162
eventPublisher.subscribe(eventSubscriber);
6263
lsClientLogger.logTrace(String.format("%s subscribed to %s", eventSubscriber.getName(),
6364
eventPublisher.getName()));
@@ -73,9 +74,13 @@ private void initialize(LSClientLogger lsClientLogger) {
7374
public static EventSyncPubSubHolder getInstance(LanguageServerContext serverContext) {
7475
EventSyncPubSubHolder subscribersHolder = serverContext.get(SUBSCRIBERS_HOLDER_KEY);
7576
if (subscribersHolder == null) {
76-
subscribersHolder = new EventSyncPubSubHolder(serverContext);
77+
synchronized (SUBSCRIBERS_HOLDER_KEY) {
78+
subscribersHolder = serverContext.get(SUBSCRIBERS_HOLDER_KEY);
79+
if (subscribersHolder == null) {
80+
subscribersHolder = new EventSyncPubSubHolder(serverContext);
81+
}
82+
}
7783
}
78-
7984
return subscribersHolder;
8085
}
8186

0 commit comments

Comments
 (0)