in dbus-java/src/main/java/org/freedesktop/dbus/connections/AbstractConnection.java [949:993]
private void handleMessage(final Error err) {
logger.debug("Handling incoming error: {}", err);
MethodCall m = null;
if (getPendingCalls() == null) {
return;
}
synchronized (getPendingCalls()) {
if (getPendingCalls().containsKey(err.getReplySerial())) {
m = getPendingCalls().remove(err.getReplySerial());
}
}
if (m != null) {
m.setReply(err);
CallbackHandler<?> cbh = null;
cbh = callbackManager.removeCallback(m);
logger.trace("{} = pendingCallbacks.remove({})", cbh, m);
// queue callback for execution
if (null != cbh) {
final CallbackHandler<?> fcbh = cbh;
logger.trace("Adding Error Runnable with callback handler {}", fcbh);
Runnable command = new Runnable() {
@Override
public synchronized void run() {
try {
logger.trace("Running Error Callback for {}", err);
DBusCallInfo info = new DBusCallInfo(err);
INFOMAP.put(Thread.currentThread(), info);
fcbh.handleError(err.getException());
INFOMAP.remove(Thread.currentThread());
} catch (Exception e) {
logger.debug("Exception while running error callback.", e);
}
}
};
executeInWorkerThreadPool(command);
}
} else {
getPendingErrorQueue().add(err);
}
}