作者:淘老婆桃桃_267 | 来源:互联网 | 2022-12-03 16:01
从核心创建我可以看到
> A fatal error has been detected by the Java Runtime Environment:
> #
> # SIGSEGV (0xb) at pc=0x00007ffbccaa1b83, pid=1781, tid=0x00007ffbb31ec700
> #
> # JRE version: Java(TM) SE Runtime Environment (8.0_181-b25) (build 1.8.0_181-b25)
> # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.181-b25 mixed mode linux-amd64 compressed oops)
> # Problematic frame:
> # J 6754 C2 java.util.Arrays.equals([B[B)Z (54 bytes) @ 0x00007ffbccaa1b83 [0x00007ffbccaa1b60+0x23]
代码是崩溃发生的
private List unitInfoList = new ArrayList();
private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
private final Lock readLock = readWriteLock.readLock();
public UnitInfo getUnitInfoFromIPAddress( InetSocketAddress address )//
{
byte[] ipAddress = address.getAddress().getAddress();
readLock.lock();
try
{
UnitInfo unitInfo;
Iterator list = unitInfoList.iterator();
while( list.hasNext() )
{
unitInfo = list.next();
if( null != unitInfo.getIpAddress() )
{
if( Arrays.equals( ipAddress, unitInfo.getIpAddress().getAddress() ) )
{
return unitInfo;
}
}
}
return null;
}
finally
{
//Unlock after completing the read operation.
readLock.unlock();
}
}
在崩溃的进程日志中,我发现了很多例外
Stack Trace Below: null
java.lang.NullPointerException at
java.util.Arrays.copyOf(Arrays.java:3237)
at common.IpAddress.getAddress(IpAddress.java:161)
这些异常出现在许多线程之前一段时间,并在进程被杀死时停止.
public byte[] getAddress()
{
byte[] address = null;
if( IPV4_VAL == version )
{
address = Arrays.copyOf(this.address, IPV4_ADDRSIZE);
}
else
{
address = this.address;
}
return address;
}
显然那些NullPointers是由于byte [] this.address未初始化而引起的,并且在执行时它仍然是null.这个错误只发生过一次,所以我在游戏中导致崩溃发生在Arrays.equals()中?如果参数为null,则此方法不会失败.那是因为copyOf()中的另一个NullPointer?在那种情况下,我不会在hss_err文件的堆栈跟踪中看到copyOf()吗?这可能是Iterator和我的readlock的并发问题吗?