Skip to content

Commit 82e7c6f

Browse files
committed
Fix rare deadlock when opening terminal
Closes CyclopsMC/IntegratedDynamics#1572
1 parent 495d531 commit 82e7c6f

1 file changed

Lines changed: 8 additions & 9 deletions

File tree

src/main/java/org/cyclops/integratedterminals/core/terminalstorage/TerminalStorageTabIngredientComponentServer.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ public void onChange(IIngredientComponentStorageObservable.StorageChangeEvent<T,
266266
protected void reApplyFilter(@Nullable IIngredientComponentStorageObservable.StorageChangeEvent<T, M> event) {
267267
boolean firstChannel = true;
268268
for (int channel : event == null ? this.unfilteredIngredientsViews.keySet() : Collections.singleton(event.getChannel())) {
269+
long maxQuantity = this.ingredientNetwork.getChannel(channel).getMaxQuantity();
269270
Predicate<T> ingredientsFilter = getIngredientsFilter();
270271
if (ingredientsFilter != null || event == null) {
271272
Iterator<T> newFilteredIngredients = getUnfilteredIngredientsView(channel)
@@ -276,22 +277,22 @@ protected void reApplyFilter(@Nullable IIngredientComponentStorageObservable.Sto
276277
IngredientCollectionDiff<T, M> diffOut = filteredDiffManager.onChange(newFilteredIngredients);
277278
if (!initialized || diffOut.hasAdditions()) {
278279
this.sendToClient(new IIngredientComponentStorageObservable.StorageChangeEvent<>(channel, null,
279-
IIngredientComponentStorageObservable.Change.ADDITION, false, diffOut.getAdditions()));
280+
IIngredientComponentStorageObservable.Change.ADDITION, false, diffOut.getAdditions()), maxQuantity);
280281
}
281282
if (diffOut.hasDeletions()) {
282283
this.sendToClient(new IIngredientComponentStorageObservable.StorageChangeEvent<>(channel, null,
283-
IIngredientComponentStorageObservable.Change.DELETION, diffOut.isCompletelyEmpty(), diffOut.getDeletions()));
284+
IIngredientComponentStorageObservable.Change.DELETION, diffOut.isCompletelyEmpty(), diffOut.getDeletions()), maxQuantity);
284285
}
285286
} else {
286287
// If the filter is null (=show all ingredients), forward the diff to the client as-is.
287288
// This allows us to skip the expensive filteredDiffManager.onChange call.
288289
if (!initialized || event.getDiff().hasAdditions()) {
289290
this.sendToClient(new IIngredientComponentStorageObservable.StorageChangeEvent<>(channel, null,
290-
IIngredientComponentStorageObservable.Change.ADDITION, false, event.getDiff().getAdditions()));
291+
IIngredientComponentStorageObservable.Change.ADDITION, false, event.getDiff().getAdditions()), maxQuantity);
291292
}
292293
if (event.getDiff().hasDeletions()) {
293294
this.sendToClient(new IIngredientComponentStorageObservable.StorageChangeEvent<>(channel, null,
294-
IIngredientComponentStorageObservable.Change.DELETION, event.getDiff().isCompletelyEmpty(), event.getDiff().getDeletions()));
295+
IIngredientComponentStorageObservable.Change.DELETION, event.getDiff().isCompletelyEmpty(), event.getDiff().getDeletions()), maxQuantity);
295296
}
296297

297298
// Also apply the diff to our diff manager
@@ -336,9 +337,7 @@ protected void reApplyFilter(@Nullable IIngredientComponentStorageObservable.Sto
336337
initialized = true;
337338
}
338339

339-
protected void sendToClient(IIngredientComponentStorageObservable.StorageChangeEvent<T, M> event) {
340-
long maxQuantity = this.ingredientNetwork.getChannel(event.getChannel()).getMaxQuantity();
341-
340+
protected void sendToClient(IIngredientComponentStorageObservable.StorageChangeEvent<T, M> event, long maxQuantity) {
342341
// Only allow ingredient collection of a max given size to be sent in a packet
343342
if (event.getInstances().size() <= GeneralConfig.terminalStoragePacketMaxInstances) {
344343
IntegratedTerminals._instance.getPacketHandler().sendToPlayer(
@@ -369,11 +368,11 @@ protected void sendToClient(IIngredientComponentStorageObservable.StorageChangeE
369368
if (GeneralConfig.packetSerializationEnableMultithreading) {
370369
packetSerializer.execute(() -> sendToClient(new IIngredientComponentStorageObservable.StorageChangeEvent<>(
371370
event.getChannel(), event.getPos(), event.getChangeType(), event.isCompleteChange(), chunk
372-
)));
371+
), maxQuantity));
373372
} else {
374373
sendToClient(new IIngredientComponentStorageObservable.StorageChangeEvent<>(
375374
event.getChannel(), event.getPos(), event.getChangeType(), event.isCompleteChange(), chunk
376-
));
375+
), maxQuantity);
377376
}
378377
}
379378
}

0 commit comments

Comments
 (0)