Better reporting of an error than an NPE.
From /computer/…/script running
  class X implements hudson.remoting.Callable {
    Object call() {5}
  }
  hudson.remoting.Channel.current().call(new X())
got:
java.io.IOException: Remote call on channel failed
	at hudson.remoting.Channel.call(Channel.java:673)
	at hudson.remoting.VirtualChannel$call.call(Unknown Source)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
	at Script1.run(Script1.groovy:4)
	at groovy.lang.GroovyShell.evaluate(GroovyShell.java:580)
	at groovy.lang.GroovyShell.evaluate(GroovyShell.java:618)
	at groovy.lang.GroovyShell.evaluate(GroovyShell.java:589)
	at hudson.util.RemotingDiagnostics$Script.call(RemotingDiagnostics.java:150)
	at hudson.util.RemotingDiagnostics$Script.call(RemotingDiagnostics.java:122)
	at hudson.remoting.UserRequest.perform(UserRequest.java:118)
	at hudson.remoting.UserRequest.perform(UserRequest.java:48)
	at hudson.remoting.Request$2.run(Request.java:326)
	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.Error: Failed to deserialize the Callable object.
	at hudson.remoting.UserRequest.perform(UserRequest.java:104)
	... 8 more
Caused by: java.lang.NullPointerException
	at hudson.remoting.RemoteClassLoader$ClassLoaderProxy.readFully(RemoteClassLoader.java:473)
	at hudson.remoting.RemoteClassLoader$ClassLoaderProxy.fetch2(RemoteClassLoader.java:421)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:275)
	... 7 more
Merge branch 'master' of github.com:jenkinsci/remoting
JUnit upgrade.
[JENKINS-6604] Race condition in RemoteClassLoader.
upgrade release plugin version
put the menu bar on top
[maven-release-plugin] prepare release remoting-2.19
[maven-release-plugin] prepare for next development iteration
[JENKINS-15120] Kohsuke’s explanation of why preloadJar does not really help.
this gets updated by separate threads
added another case.

This was my failed attempt to reproduce a problem we see in http://ci.jenkins-ci.org/
Now the problem was reproduced successfully
[FIXED JENKINS-7114] fixed the layer confusion in the remoting

When ProxyOutputStream sends write(byte[]) to the other end and the actual write fails, "NotifyDeadWriter" object comes back and reports back that the write has failed. Without this mechanism, the writer side will keep on going.

Because the RemoteOutputStream service is a lower layer service that cannot rely on custom classloading service (doing so would create cyclic dependencies), when we send back this exception, the object graph of the exception needs to be deserializable on the receiver side. This is not the case when the exception class is defined by the user (as is the case of winstone.ClientSocketException.)

This fix addresses this problem by turning an exception class into another class that emulates the output of the original exception.

To make this change interopeable with earlier versions, we need to introduce a new capability flag. If we send MimicException to the other side and the other side doesn't have this class definition, then it'll cause automatic fail.
[maven-release-plugin] prepare release remoting-2.20
[maven-release-plugin] prepare for next development iteration
Basic implementation of prefetch.
constant-pool-scanner 1.0 released
@since
Updated parent POM
Nitpicking. int << int then casting to long makes me uncomfortable.