Branch: refs/heads/master
Home: https://github.com/jenkinsci/remoting
Commit: ca65292119f9d9a1f36a6db27e6e078ae480c6c4
https://github.com/jenkinsci/remoting/commit/ca65292119f9d9a1f36a6db27e6e078ae480c6c4
Author: Kohsuke Kawaguchi <[email protected]>
Date: 2014-12-17 (Wed, 17 Dec 2014)
Changed paths:
M src/main/java/hudson/remoting/Channel.java
M src/main/java/hudson/remoting/JarLoaderImpl.java
Log Message:
-----------
Fixed a sporadic double unexport attempts to JarLoader.
Channel.export() creates a proxy that implicitly owns a reference count. If
that proxy gets sent twice to the other side of the channel, it results in two
copies of RemoteInvocationHandler, and each will try to release a reference
count when it gets garbage collected, resulting in an attempt to unexport an
object that's already unexported.
In case of JarLoader this can happen because the exported proxy object was set
as a property that the other side calls waitForRemoteProperty on. The correct
thing to do is to create a new proxy every time an object is serialized, via
the writeObject method.
The full exception below. This error happened when I was working on an
unrelated problem:
WARNING: Failed to monitor bar for Free Swap Space
java.util.concurrent.ExecutionException: java.lang.Error: Unable to load
resource com/sun/jna/win32-x86/jnidispatch.dll
at hudson.remoting.Channel$3.adapt(Channel.java:784)
at hudson.remoting.Channel$3.adapt(Channel.java:779)
at hudson.remoting.FutureAdapter.get(FutureAdapter.java:59)
at
hudson.node_monitors.AbstractAsyncNodeMonitorDescriptor.monitor(AbstractAsyncNodeMonitorDescriptor.java:97)
at
hudson.node_monitors.AbstractNodeMonitorDescriptor$Record.run(AbstractNodeMonitorDescriptor.java:302)
Caused by: java.lang.Error: Unable to load resource
com/sun/jna/win32-x86/jnidispatch.dll
at
hudson.remoting.RemoteClassLoader.findResource(RemoteClassLoader.java:381)
at java.lang.ClassLoader.getResource(Unknown Source)
at com.sun.jna.Native.extractFromResourcePath(Native.java:830)
at
com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:751)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:736)
at com.sun.jna.Native.<clinit>(Native.java:131)
at com.sun.jna.Pointer.<clinit>(Pointer.java:41)
at com.sun.jna.Structure.<clinit>(Structure.java:1949)
at org.jvnet.hudson.Windows.monitor(Windows.java:42)
at
hudson.node_monitors.SwapSpaceMonitor$MonitorTask.call(SwapSpaceMonitor.java:113)
at
hudson.node_monitors.SwapSpaceMonitor$MonitorTask.call(SwapSpaceMonitor.java:103)
at hudson.remoting.UserRequest.perform(UserRequest.java:121)
at hudson.remoting.UserRequest.perform(UserRequest.java:49)
at hudson.remoting.Request$2.run(Request.java:324)
at
hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at hudson.remoting.Engine$1$1.run(Engine.java:63)
at java.lang.Thread.run(Unknown Source)
at ......remote call to bar(Native Method)
at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1356)
at hudson.remoting.UserResponse.retrieve(UserRequest.java:221)
at hudson.remoting.Channel$3.adapt(Channel.java:782)
... 4 more
Caused by: java.util.concurrent.ExecutionException:
java.lang.IllegalStateException: Invalid object ID 2 iota=6
at hudson.remoting.AsyncFutureImpl.get(AsyncFutureImpl.java:75)
at hudson.remoting.FutureAdapter.get(FutureAdapter.java:55)
at
hudson.remoting.RemoteClassLoader.findResource(RemoteClassLoader.java:373)
at java.lang.ClassLoader.getResource(Unknown Source)
at com.sun.jna.Native.extractFromResourcePath(Native.java:830)
at
com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:751)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:736)
at com.sun.jna.Native.<clinit>(Native.java:131)
at com.sun.jna.Pointer.<clinit>(Pointer.java:41)
at com.sun.jna.Structure.<clinit>(Structure.java:1949)
at org.jvnet.hudson.Windows.monitor(Windows.java:42)
at
hudson.node_monitors.SwapSpaceMonitor$MonitorTask.call(SwapSpaceMonitor.java:113)
at
hudson.node_monitors.SwapSpaceMonitor$MonitorTask.call(SwapSpaceMonitor.java:103)
at hudson.remoting.UserRequest.perform(UserRequest.java:121)
at hudson.remoting.UserRequest.perform(UserRequest.java:49)
at hudson.remoting.Request$2.run(Request.java:324)
at
hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at hudson.remoting.Engine$1$1.run(Engine.java:63)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Invalid object ID 2 iota=6
at hudson.remoting.ExportTable.diagnoseInvalidId(ExportTable.java:354)
at hudson.remoting.ExportTable.get(ExportTable.java:330)
at hudson.remoting.Channel.getExportedObject(Channel.java:604)
at
hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:317)
at hudson.remoting.Request$2.run(Request.java:324)
at
hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
at
jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
at ......remote call to channel(Native Method)
at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1356)
at hudson.remoting.Request.call(Request.java:171)
at
hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:182)
at $Proxy5.writeJarTo(Unknown Source)
at
hudson.remoting.FileSystemJarCache.retrieve(FileSystemJarCache.java:66)
at hudson.remoting.JarCacheSupport$1.run(JarCacheSupport.java:62)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at
hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:104)
... 1 more
Caused by: java.lang.Exception: Object was recently deallocated
#2 (ref.0) : object=null type=hudson.remoting.JarLoaderImpl
interfaces=[hudson.remoting.JarLoader]
Created at Tue Dec 16 15:59:14 PST 2014
at hudson.remoting.ExportTable$Entry.<init>(ExportTable.java:99)
at hudson.remoting.ExportTable.export(ExportTable.java:305)
at hudson.remoting.Channel.internalExport(Channel.java:600)
at hudson.remoting.Channel.export(Channel.java:591)
at hudson.remoting.Channel.<init>(Channel.java:472)
at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:280)
at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:290)
at
org.jenkinsci.remoting.nio.NioChannelBuilder.build(NioChannelBuilder.java:36)
at
org.jenkinsci.remoting.nio.NioChannelBuilder.build(NioChannelBuilder.java:52)
at
jenkins.slaves.JnlpSlaveAgentProtocol$Handler.jnlpConnect(JnlpSlaveAgentProtocol.java:120)
at
jenkins.slaves.DefaultJnlpSlaveReceiver.handle(DefaultJnlpSlaveReceiver.java:63)
at
jenkins.slaves.JnlpSlaveAgentProtocol2$Handler2.run(JnlpSlaveAgentProtocol2.java:57)
at
jenkins.slaves.JnlpSlaveAgentProtocol2.handle(JnlpSlaveAgentProtocol2.java:31)
at
hudson.TcpSlaveAgentListener$ConnectionHandler.run(TcpSlaveAgentListener.java:156)
Released at Tue Dec 16 15:59:14 PST 2014
at hudson.remoting.ExportTable$Entry.release(ExportTable.java:131)
at hudson.remoting.ExportTable.unexportByOid(ExportTable.java:382)
at hudson.remoting.Channel.unexport(Channel.java:612)
at hudson.remoting.UnexportCommand.execute(UnexportCommand.java:43)
at hudson.remoting.Channel$2.handle(Channel.java:483)
at
hudson.remoting.AbstractByteArrayCommandTransport$1.handle(AbstractByteArrayCommandTransport.java:61)
at
org.jenkinsci.remoting.nio.NioChannelHub$2.run(NioChannelHub.java:597)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at
hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:111)
at
jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: Command hudson.remoting.UnexportCommand@4e2050eb created at
at hudson.remoting.Command.<init>(Command.java:67)
at hudson.remoting.Command.<init>(Command.java:50)
at hudson.remoting.UnexportCommand.<init>(UnexportCommand.java:33)
at
hudson.remoting.RemoteInvocationHandler.finalize(RemoteInvocationHandler.java:240)
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
at java.lang.ref.Finalizer.access$100(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
Caused by: java.lang.Exception: Proxy
hudson.remoting.RemoteInvocationHandler@2 was created for interface
hudson.remoting.JarLoader
at
hudson.remoting.RemoteInvocationHandler.<init>(RemoteInvocationHandler.java:99)
at
hudson.remoting.RemoteInvocationHandler.wrap(RemoteInvocationHandler.java:111)
at hudson.remoting.Channel.export(Channel.java:592)
at hudson.remoting.Channel.<init>(Channel.java:472)
at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:280)
at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:290)
at
org.jenkinsci.remoting.nio.NioChannelBuilder.build(NioChannelBuilder.java:36)
at
org.jenkinsci.remoting.nio.NioChannelBuilder.build(NioChannelBuilder.java:52)
at
jenkins.slaves.JnlpSlaveAgentProtocol$Handler.jnlpConnect(JnlpSlaveAgentProtocol.java:120)
at
jenkins.slaves.DefaultJnlpSlaveReceiver.handle(DefaultJnlpSlaveReceiver.java:63)
at
jenkins.slaves.JnlpSlaveAgentProtocol2$Handler2.run(JnlpSlaveAgentProtocol2.java:57)
at
jenkins.slaves.JnlpSlaveAgentProtocol2.handle(JnlpSlaveAgentProtocol2.java:31)
at
hudson.TcpSlaveAgentListener$ConnectionHandler.run(TcpSlaveAgentListener.java:156)
at hudson.remoting.ExportTable.diagnoseInvalidId(ExportTable.java:347)
at hudson.remoting.ExportTable.get(ExportTable.java:330)
at hudson.remoting.Channel.getExportedObject(Channel.java:604)
at
hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:317)
at hudson.remoting.Request$2.run(Request.java:324)
at
hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
at
jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: Released at Tue Dec 16 15:59:14 PST 2014
at hudson.remoting.ExportTable$Entry.release(ExportTable.java:131)
at hudson.remoting.ExportTable.unexportByOid(ExportTable.java:382)
at hudson.remoting.Channel.unexport(Channel.java:612)
at hudson.remoting.UnexportCommand.execute(UnexportCommand.java:43)
at hudson.remoting.Channel$2.handle(Channel.java:483)
at
hudson.remoting.AbstractByteArrayCommandTransport$1.handle(AbstractByteArrayCommandTransport.java:61)
at
org.jenkinsci.remoting.nio.NioChannelHub$2.run(NioChannelHub.java:597)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at
hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:111)
at
jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
... 5 more
Caused by: Command hudson.remoting.UnexportCommand@5e7a6d32 created at
at hudson.remoting.Command.<init>(Command.java:67)
at hudson.remoting.Command.<init>(Command.java:50)
at hudson.remoting.UnexportCommand.<init>(UnexportCommand.java:33)
at
hudson.remoting.RemoteInvocationHandler.finalize(RemoteInvocationHandler.java:240)
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
at java.lang.ref.Finalizer.access$100(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
Caused by: java.lang.Exception: Proxy hudson.remoting.RemoteInvocationHandler@2
was created for interface hudson.remoting.JarLoader
at
hudson.remoting.RemoteInvocationHandler.<init>(RemoteInvocationHandler.java:99)
at
hudson.remoting.RemoteInvocationHandler.wrap(RemoteInvocationHandler.java:111)
at hudson.remoting.Channel.export(Channel.java:592)
at hudson.remoting.Channel.<init>(Channel.java:472)
at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:280)
at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:290)
at
org.jenkinsci.remoting.nio.NioChannelBuilder.build(NioChannelBuilder.java:36)
at
org.jenkinsci.remoting.nio.NioChannelBuilder.build(NioChannelBuilder.java:52)
at
jenkins.slaves.JnlpSlaveAgentProtocol$Handler.jnlpConnect(JnlpSlaveAgentProtocol.java:120)
at
jenkins.slaves.DefaultJnlpSlaveReceiver.handle(DefaultJnlpSlaveReceiver.java:63)
at
jenkins.slaves.JnlpSlaveAgentProtocol2$Handler2.run(JnlpSlaveAgentProtocol2.java:57)
at
jenkins.slaves.JnlpSlaveAgentProtocol2.handle(JnlpSlaveAgentProtocol2.java:31)
at
hudson.TcpSlaveAgentListener$ConnectionHandler.run(TcpSlaveAgentListener.java:156)
--
You received this message because you are subscribed to the Google Groups
"Jenkins Commits" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.