Fixed String format that caused the timeout thread to crash silently.
That fix revealed a race condition where an NullPointerException was thrown whenever the server response arrived while the timeout executed UtilSingleNotifier.receive(String name, DeepstreamError error, Object data) at the same time.
commits:
0a4780fca38b51a49d9efa59b39cab95b7e47d10
Prevent the loss of callbacks when two processes enter the if( callbacks == null ) block at the same time and each process creates its own callbacks object and puts it to the requests map. The process that gets to execute the synchronized block second will override the requests map entry of the first process. This is solved by including the if block into the synchronized block.
commits: 87b110823b962f239ddaed8eb43df3d9cc6d7576 32d3fc19fe528da75bb27503470e32491067781b
Fixed String format that caused the timeout thread to crash silently. That fix revealed a race condition where an NullPointerException was thrown whenever the server response arrived while the timeout executed UtilSingleNotifier.receive(String name, DeepstreamError error, Object data) at the same time.
commits: 0a4780fca38b51a49d9efa59b39cab95b7e47d10
Prevent the loss of callbacks when two processes enter the if( callbacks == null ) block at the same time and each process creates its own callbacks object and puts it to the requests map. The process that gets to execute the synchronized block second will override the requests map entry of the first process. This is solved by including the if block into the synchronized block.