You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hama.apache.org by "JongYoon Lim (JIRA)" <ji...@apache.org> on 2015/09/02 11:36:46 UTC
[jira] [Created] (HAMA-972) Synchronization on local variable
JongYoon Lim created HAMA-972:
---------------------------------
Summary: Synchronization on local variable
Key: HAMA-972
URL: https://issues.apache.org/jira/browse/HAMA-972
Project: Hama
Issue Type: Bug
Components: bsp core
Reporter: JongYoon Lim
Priority: Minor
I'm not sure that the synchronization of the following code is proper.
In the code, it uses the *call variable* as a lock. But it's a local variable. So whenever this function is called, the lock is changed. I think this is a bug... What do you think..? Is there anything that I'm missing..?
{code}
// Client.java
public Writable call(Writable param, ConnectionId remoteId)
throws InterruptedException, IOException {
Call call = new Call(param);
Connection connection = getConnection(remoteId, call);
connection.sendParam(call); // send the parameter
boolean interrupted = false;
synchronized (call) {
int callFailCount = 0;
while (!call.done) {
try {
call.wait(1000); // wait for the result
// prevent client hang from response error
if (callFailCount++ == IPC_CLIENT_CONNECT_MAX_RETRIES_DEFAULT)
break;
} catch (InterruptedException ie) {
interrupted = true;
}
}
if (interrupted) {
// set the interrupt flag now that we are done waiting
Thread.currentThread().interrupt();
}
if (call.error != null) {
if (call.error instanceof RemoteException) {
call.error.fillInStackTrace();
throw call.error;
} else { // local exception
// use the connection because it will reflect an ip change,
// unlike
// the remoteId
throw wrapException(connection.getRemoteAddress(), call.error);
}
} else {
return call.value;
}
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)