diff --git a/src/main/resources/application.conf b/src/main/resources/application.conf index 247c47f49..ed82cf87a 100644 --- a/src/main/resources/application.conf +++ b/src/main/resources/application.conf @@ -268,6 +268,15 @@ opencomputers { # IN PARTICULAR, DO NOT REPORT ISSUES AFTER MESSING WITH THIS! maxTotalRam: 67108864 } + + # The maximum depth a machine will queue signals before dropping them + # A machine state should be pulling signals via computer.pullSignal + # As the machine receives signals they are queued for pulling, and + # this maximum defines the max queue size. All signals recieved when + # the queue is full are discarded. Note that clipboard text creates + # a signal for each line of text. Thus client are limited to pasting + # text of this many lines. The default (and minimum) is 256 + maxSignalQueueSize: 256 } # Robot related settings, what they may do and general balancing. diff --git a/src/main/scala/li/cil/oc/Settings.scala b/src/main/scala/li/cil/oc/Settings.scala index acf150673..bf72e01b8 100644 --- a/src/main/scala/li/cil/oc/Settings.scala +++ b/src/main/scala/li/cil/oc/Settings.scala @@ -338,7 +338,6 @@ class Settings(val config: Config) { val maxScreenWidth = config.getInt("misc.maxScreenWidth") max 1 val maxScreenHeight = config.getInt("misc.maxScreenHeight") max 1 val inputUsername = config.getBoolean("misc.inputUsername") - val maxClipboard = config.getInt("misc.maxClipboard") max 0 val maxNetworkPacketSize = config.getInt("misc.maxNetworkPacketSize") max 0 // Need at least 4 for nanomachine protocol. Because I can! val maxNetworkPacketParts = config.getInt("misc.maxNetworkPacketParts") max 4 @@ -465,6 +464,9 @@ class Settings(val config: Config) { val registerLuaJArchitecture = config.getBoolean("debug.registerLuaJArchitecture") val disableLocaleChanging = config.getBoolean("debug.disableLocaleChanging") + + // >= 1.7.4 + val maxSignalQueueSize: Int = (if (config.hasPath("computer.maxSignalQueueSize")) config.getInt("computer.maxSignalQueueSize") else 256) min 256 } object Settings { diff --git a/src/main/scala/li/cil/oc/server/machine/Machine.scala b/src/main/scala/li/cil/oc/server/machine/Machine.scala index 3b536e317..cef8f7f12 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -102,6 +102,8 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach private var cost = Settings.get.computerCost * Settings.get.tickFrequency + private val maxSignalQueueSize = Settings.get.maxSignalQueueSize + // ----------------------------------------------------------------------- // override def onHostChanged(): Unit = { @@ -311,7 +313,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach state.synchronized(state.top match { case Machine.State.Stopped | Machine.State.Stopping => return false case _ => signals.synchronized { - if (signals.size >= 256) return false + if (signals.size >= maxSignalQueueSize) return false else if (args == null) { signals.enqueue(new Machine.Signal(name, Array.empty)) }