代码如下:
public int activeTest(socketStruct socket, int retryTimes, int timeout, deliverVector deliverQueue, int type)
{
SMGPHeadStruct head;
int errorCode;
byte body[];
head = new SMGPHeadStruct();
head.packageSize = 12;
head.requestId = 4;
errorCode = 0;
body = new byte[0];
socketStruct socketstruct = socket;
socketstruct;
JVM INSTR monitorenter ;
int j = 0;
_L4:
int startTime;
if(j >= retryTimes)
break; /* Loop/switch isn't completed */
startTime = (int)(System.currentTimeMillis() / 1000L);
head.sequenceId = socket.seq++;
if(socket.seq == 0x7fffffff)
socket.seq = 1;
socket.socket.setSoTimeout(timeout);
DataInputStream dataRec = new DataInputStream(socket.socket.getInputStream());
DataOutputStream dataSend = new DataOutputStream(socket.socket.getOutputStream());
if(send(head, body, dataSend) != 0)
{
errorCode = 97;
break MISSING_BLOCK_LABEL_275;
}
_L2:
Hashtable hash;
int i;
if((int)(System.currentTimeMillis() / 1000L) - startTime > timeout)
break MISSING_BLOCK_LABEL_275;
hash = receive(socket);
if(hash == null)
{
errorCode = 22;
break MISSING_BLOCK_LABEL_275;
}
if(!((String)hash.get("result")).equals("ok"))
break; /* Loop/switch isn't completed */
SMGPHeadStruct h = (SMGPHeadStruct)hash.get("head");
if(h.sequenceId != head.sequenceId || h.requestId != head.requestId + 0x80000000)
break MISSING_BLOCK_LABEL_253;
i = 0;
socketstruct;
JVM INSTR monitorexit ;
return i;
dealDeliver(socket, hash, deliverQueue, type);
if(true) goto _L2; else goto _L1
_L1:
errorCode = 97;
j++;
if(true) goto _L4; else goto _L3
IOException ioexception;
ioexception;
System.err.println("socketLogic.activeTest Failed I/O: ".concat(String.valueOf(String.valueOf(ioexception))));
startTime = 97;
socketstruct;
JVM INSTR monitorexit ;
return startTime;
ioexception;
System.err.println("socketLogic.activeTest Exception: ".concat(String.valueOf(String.valueOf(ioexception))));
startTime = 22;
socketstruct;
JVM INSTR monitorexit ;
return startTime;
_L3:
socketstruct;
JVM INSTR monitorexit ;
goto _L5
socketstruct;
JVM INSTR monitorexit ;
throw ;
_L5:
return errorCode;
}
public int activeTest(socketStruct socket, int retryTimes, int timeout, deliverVector deliverQueue, int type)
{
SMGPHeadStruct head;
int errorCode;
byte body[];
head = new SMGPHeadStruct();
head.packageSize = 12;
head.requestId = 4;
errorCode = 0;
body = new byte[0];
socketStruct socketstruct = socket;
socketstruct;
JVM INSTR monitorenter ;
int j = 0;
_L4:
int startTime;
if(j >= retryTimes)
break; /* Loop/switch isn't completed */
startTime = (int)(System.currentTimeMillis() / 1000L);
head.sequenceId = socket.seq++;
if(socket.seq == 0x7fffffff)
socket.seq = 1;
socket.socket.setSoTimeout(timeout);
DataInputStream dataRec = new DataInputStream(socket.socket.getInputStream());
DataOutputStream dataSend = new DataOutputStream(socket.socket.getOutputStream());
if(send(head, body, dataSend) != 0)
{
errorCode = 97;
break MISSING_BLOCK_LABEL_275;
}
_L2:
Hashtable hash;
int i;
if((int)(System.currentTimeMillis() / 1000L) - startTime > timeout)
break MISSING_BLOCK_LABEL_275;
hash = receive(socket);
if(hash == null)
{
errorCode = 22;
break MISSING_BLOCK_LABEL_275;
}
if(!((String)hash.get("result")).equals("ok"))
break; /* Loop/switch isn't completed */
SMGPHeadStruct h = (SMGPHeadStruct)hash.get("head");
if(h.sequenceId != head.sequenceId || h.requestId != head.requestId + 0x80000000)
break MISSING_BLOCK_LABEL_253;
i = 0;
socketstruct;
JVM INSTR monitorexit ;
return i;
dealDeliver(socket, hash, deliverQueue, type);
if(true) goto _L2; else goto _L1
_L1:
errorCode = 97;
j++;
if(true) goto _L4; else goto _L3
IOException ioexception;
ioexception;
System.err.println("socketLogic.activeTest Failed I/O: ".concat(String.valueOf(String.valueOf(ioexception))));
startTime = 97;
socketstruct;
JVM INSTR monitorexit ;
return startTime;
ioexception;
System.err.println("socketLogic.activeTest Exception: ".concat(String.valueOf(String.valueOf(ioexception))));
startTime = 22;
socketstruct;
JVM INSTR monitorexit ;
return startTime;
_L3:
socketstruct;
JVM INSTR monitorexit ;
goto _L5
socketstruct;
JVM INSTR monitorexit ;
throw ;
_L5:
return errorCode;
}
估计是同步锁的功能!
JVM INSTR monitorenter lock
JVM INSTR monitorexit unlock