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:
Ceikry
2022-08-20 07:27:33 +00:00
committed by Ryan
parent a69253d3d2
commit e7804fdd42
2 changed files with 8 additions and 9 deletions
@@ -37,7 +37,7 @@ abstract class RandomEventNPC(id: Int) : NPC(id) {
open fun terminate() {
finalized = true
pulseManager.clear("amemovement")
RandomEventManager.getInstance(player)!!.event = null
RandomEventManager.getInstance(player)?.event = null
if (initialized) {
poofClear(this)
}
@@ -16,7 +16,7 @@ class PacketWriteQueue : TickListener {
companion object {
private val queueLock = ReentrantLock()
private val packetsToQueue = ArrayList<QueuedPacket<*>?>(1000)
private val packetsToQueue = LinkedList<QueuedPacket<*>?>()
private val packetsToWrite = LinkedList<QueuedPacket<*>?>()
@JvmStatic
@@ -34,7 +34,7 @@ class PacketWriteQueue : TickListener {
@JvmStatic
fun <T> push(packet: OutgoingPacket<T>, context: T) {
if (queueLock.isLocked)
if (queueLock.isHeldByCurrentThread)
packetsToQueue.add(QueuedPacket(packet, context))
else
packetsToWrite.add(QueuedPacket(packet, context))
@@ -58,8 +58,9 @@ class PacketWriteQueue : TickListener {
SystemLogger.logWarn("Packet queue was NOT empty! Remaining packets: ${packetsToWrite.size}")
try {
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()
} finally {
packetsToWrite.clear()
@@ -68,10 +69,8 @@ class PacketWriteQueue : TickListener {
queueLock.unlock()
val queueIter = packetsToQueue.iterator()
while (queueIter.hasNext()) {
packetsToWrite.add(queueIter.next())
queueIter.remove()
while (packetsToQueue.isNotEmpty()) {
packetsToWrite.add(packetsToQueue.pop())
}
}