Fixed server crash caused by HCIM death
Fixed NPEs thrown by packet write queue Fixed rare concurrency issue with packet write queue
This commit is contained in:
@@ -37,7 +37,7 @@ abstract class RandomEventNPC(id: Int) : NPC(id) {
|
|||||||
open fun terminate() {
|
open fun terminate() {
|
||||||
finalized = true
|
finalized = true
|
||||||
pulseManager.clear("amemovement")
|
pulseManager.clear("amemovement")
|
||||||
RandomEventManager.getInstance(player)!!.event = null
|
RandomEventManager.getInstance(player)?.event = null
|
||||||
if (initialized) {
|
if (initialized) {
|
||||||
poofClear(this)
|
poofClear(this)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class PacketWriteQueue : TickListener {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val queueLock = ReentrantLock()
|
private val queueLock = ReentrantLock()
|
||||||
private val packetsToQueue = ArrayList<QueuedPacket<*>?>(1000)
|
private val packetsToQueue = LinkedList<QueuedPacket<*>?>()
|
||||||
private val packetsToWrite = LinkedList<QueuedPacket<*>?>()
|
private val packetsToWrite = LinkedList<QueuedPacket<*>?>()
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@@ -34,7 +34,7 @@ class PacketWriteQueue : TickListener {
|
|||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun <T> push(packet: OutgoingPacket<T>, context: T) {
|
fun <T> push(packet: OutgoingPacket<T>, context: T) {
|
||||||
if (queueLock.isLocked)
|
if (queueLock.isHeldByCurrentThread)
|
||||||
packetsToQueue.add(QueuedPacket(packet, context))
|
packetsToQueue.add(QueuedPacket(packet, context))
|
||||||
else
|
else
|
||||||
packetsToWrite.add(QueuedPacket(packet, context))
|
packetsToWrite.add(QueuedPacket(packet, context))
|
||||||
@@ -58,8 +58,9 @@ class PacketWriteQueue : TickListener {
|
|||||||
SystemLogger.logWarn("Packet queue was NOT empty! Remaining packets: ${packetsToWrite.size}")
|
SystemLogger.logWarn("Packet queue was NOT empty! Remaining packets: ${packetsToWrite.size}")
|
||||||
try {
|
try {
|
||||||
for (pkt: QueuedPacket<*>? in packetsToWrite) SystemLogger.logWarn("${pkt?.out?.javaClass?.simpleName ?: "NULL"} <- ${pkt?.context ?: "NULL"}")
|
for (pkt: QueuedPacket<*>? in packetsToWrite) SystemLogger.logWarn("${pkt?.out?.javaClass?.simpleName ?: "NULL"} <- ${pkt?.context ?: "NULL"}")
|
||||||
} catch (e: Exception)
|
} catch (ignored: NullPointerException) {
|
||||||
{
|
//do nothing, we don't care, this can happen when everything is working as intended.
|
||||||
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
} finally {
|
} finally {
|
||||||
packetsToWrite.clear()
|
packetsToWrite.clear()
|
||||||
@@ -68,10 +69,8 @@ class PacketWriteQueue : TickListener {
|
|||||||
|
|
||||||
queueLock.unlock()
|
queueLock.unlock()
|
||||||
|
|
||||||
val queueIter = packetsToQueue.iterator()
|
while (packetsToQueue.isNotEmpty()) {
|
||||||
while (queueIter.hasNext()) {
|
packetsToWrite.add(packetsToQueue.pop())
|
||||||
packetsToWrite.add(queueIter.next())
|
|
||||||
queueIter.remove()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user