codeaudit / simile-butterfly

Automatically exported from code.google.com/p/simile-butterfly
Apache License 2.0
0 stars 1 forks source link

Deadlock in class loader #10

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
From https://github.com/OpenRefine/OpenRefine/issues/626

"This is the second time I've seen this deadlock. The first time I encountered 
it, pausing and resuming the server was enough to clear it, so I'm going to 
record all the info this time before debugging more!

The lines that I've marked with asterisks represent the synchronized 
methods/blocks according to Eclipse's display. There are many threads blocked 
with the stack in the state of the last two traces below, but I've only include 
two. The third trace is the odd man out and is the other half of the deadlock. 
The "classes" attempting to be loaded vary, but always seem to be package 
names, including "com.google.refine" "com" "org" "edu"

Thread pool-1-thread-13

URLClassLoader$1.run() line: not available

URLClassLoader$1.run() line: not available

AccessController.doPrivileged(PrivilegedExceptionAction<T>, 
AccessControlContext) line: not available [native method] 
Launcher$AppClassLoader(URLClassLoader).findClass(String) line: not available

Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: not 
available 
Launcher$AppClassLoader.loadClass(String, boolean) line: not available

Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available

WebAppClassLoader.loadClass(String, boolean) line: 401
WebAppClassLoader.loadClass(String) line: 363
ButterflyClassLoader.loadClass(String, boolean) line: 61
ButterflyClassLoader(ClassLoader).loadClass(String) line: not available 
Kit.classOrNull(ClassLoader, String) line: 92
NativeJavaTopPackage(NativeJavaPackage).getPkgProperty(String, Scriptable, 
boolean) line: 159
NativeJavaTopPackage(NativeJavaPackage).get(String, Scriptable) line: 114
NativeJavaTopPackage.init(Context, Scriptable, boolean) line: 128
GeneratedMethodAccessor32.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available
Method.invoke(Object, Object...) line: not available
ScriptableObject.buildClassCtor(Scriptable, Class<T>, boolean, boolean) line: 
1030
LazilyLoadedCtor.buildValue() line: 110 LazilyLoadedCtor.init() line: 89
ImporterTopLevel(ScriptableObject).getImpl(String, int, Scriptable) line: 2032
ImporterTopLevel(ScriptableObject).get(String, Scriptable) line: 287
ImporterTopLevel(IdScriptableObject).get(String, Scriptable) line: 387
ImporterTopLevel.get(String, Scriptable) line: 131
ScriptableObject.getProperty(Scriptable, String) line: 1617 
ScriptRuntime.topScopeName(Context, Scriptable, String) line: 1788
ScriptRuntime.name(Context, Scriptable, String) line: 1690
c8._c0(c8, Context, Scriptable, Scriptable, Object[]) line: 36
c8.call(Context, Scriptable, Scriptable, Object[]) line: not available
Butterfly$ButterflyContextFactory(ContextFactory).doTopCall(Callable, Context, 
Scriptable, Scriptable, Object[]) line: 398
ScriptRuntime.doTopCall(Callable, Context, Scriptable, Scriptable, Object[]) 
line: 3065 c8.call(Context, Scriptable, Scriptable, Object[]) line: not 
available
c8.exec(Context, Scriptable) line: not available
ButterflyModuleImpl.initScope(Context, Scriptable) line: 619
ButterflyModuleImpl$Controller.run(Context) line: 375
Context.call(ContextFactory, ContextAction) line: 515
Butterfly$ButterflyContextFactory(ContextFactory).call(ContextAction) line: 507 
ButterflyModuleImpl.processScript(String, HttpServletRequest, 
HttpServletResponse) line: 650
ButterflyModuleImpl.process(String, HttpServletRequest, HttpServletResponse) 
line: 427
RefineServlet(Butterfly).service(HttpServletRequest, HttpServletResponse) line: 
516 RefineServlet.service(HttpServletRequest, HttpServletResponse) line: 200
RefineServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 820
ServletHolder.handle(ServletRequest, ServletResponse) line: 511 
ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1166 
GzipFilter(UserAgentFilter).doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 81 GzipFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 132 ServletHandler$CachedChain.doFilter(ServletRequest, 
ServletResponse) line: 1157 ServletHandler.handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 388
SecurityHandler.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 216
SessionHandler.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 182
WebAppContext(ContextHandler).handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 765
WebAppContext.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 418
RefineServer(HandlerWrapper).handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 152 RefineServer(Server).handle(HttpConnection) 
line: 326
HttpConnection.handleRequest() line: 542
HttpConnection$RequestHandler.headerComplete() line: 923
HttpParser.parseNext() line: 547
HttpParser.parseAvailable() line: 212
HttpConnection.handle() line: 404
SocketConnector$Connection.run() line: 228
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: not available 
ThreadPoolExecutor$Worker.run() line: not available Thread.run() line: not 
available
Thread pool-1-thread-7

WebAppClassLoader.loadClass(String, boolean) line: 369
WebAppClassLoader.loadClass(String) line: 363
ButterflyClassLoader.loadClass(String, boolean) line: 56
ButterflyClassLoader(ClassLoader).loadClass(String) line: not available 
Kit.classOrNull(ClassLoader, String) line: 92
NativeJavaTopPackage(NativeJavaPackage).getPkgProperty(String, Scriptable, 
boolean) line: 159
NativeJavaTopPackage(NativeJavaPackage).get(String, Scriptable) line: 114
NativeJavaTopPackage.init(Context, Scriptable, boolean) line: 128
GeneratedMethodAccessor32.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available
Method.invoke(Object, Object...) line: not available
ScriptableObject.buildClassCtor(Scriptable, Class<T>, boolean, boolean) line: 
1030
LazilyLoadedCtor.buildValue() line: 110 LazilyLoadedCtor.init() line: 89
ImporterTopLevel(ScriptableObject).getImpl(String, int, Scriptable) line: 2032
ImporterTopLevel(ScriptableObject).get(String, Scriptable) line: 287
ImporterTopLevel(IdScriptableObject).get(String, Scriptable) line: 387
ImporterTopLevel.get(String, Scriptable) line: 131
ScriptableObject.getProperty(Scriptable, String) line: 1617 
ScriptRuntime.topScopeName(Context, Scriptable, String) line: 1788
ScriptRuntime.name(Context, Scriptable, String) line: 1690
c8._c0(c8, Context, Scriptable, Scriptable, Object[]) line: 36
c8.call(Context, Scriptable, Scriptable, Object[]) line: not available
Butterfly$ButterflyContextFactory(ContextFactory).doTopCall(Callable, Context, 
Scriptable, Scriptable, Object[]) line: 398
ScriptRuntime.doTopCall(Callable, Context, Scriptable, Scriptable, Object[]) 
line: 3065 c8.call(Context, Scriptable, Scriptable, Object[]) line: not 
available
c8.exec(Context, Scriptable) line: not available
ButterflyModuleImpl.initScope(Context, Scriptable) line: 619
ButterflyModuleImpl$Controller.run(Context) line: 375
Context.call(ContextFactory, ContextAction) line: 515
Butterfly$ButterflyContextFactory(ContextFactory).call(ContextAction) line: 507 
ButterflyModuleImpl.processScript(String, HttpServletRequest, 
HttpServletResponse) line: 650
ButterflyModuleImpl.process(String, HttpServletRequest, HttpServletResponse) 
line: 427
RefineServlet(Butterfly).service(HttpServletRequest, HttpServletResponse) line: 
516 RefineServlet.service(HttpServletRequest, HttpServletResponse) line: 200
RefineServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 820
ServletHolder.handle(ServletRequest, ServletResponse) line: 511 
ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1166 
GzipFilter(UserAgentFilter).doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 81 GzipFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 132 ServletHandler$CachedChain.doFilter(ServletRequest, 
ServletResponse) line: 1157 ServletHandler.handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 388
SecurityHandler.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 216
SessionHandler.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 182
WebAppContext(ContextHandler).handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 765
WebAppContext.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 418
RefineServer(HandlerWrapper).handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 152 RefineServer(Server).handle(HttpConnection) 
line: 326
HttpConnection.handleRequest() line: 542
HttpConnection$RequestHandler.headerComplete() line: 923
HttpParser.parseNext() line: 547
HttpParser.parseAvailable() line: 212
HttpConnection.handle() line: 404
SocketConnector$Connection.run() line: 228
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: not available 
ThreadPoolExecutor$Worker.run() line: not available Thread.run() line: not 
available
Thread pool-1-thread-25

WebAppClassLoader.loadClass(String, boolean) line: 369
WebAppClassLoader.loadClass(String) line: 363
ButterflyClassLoader.loadClass(String, boolean) line: 61
ButterflyClassLoader(ClassLoader).loadClass(String) line: not available 
Kit.classOrNull(ClassLoader, String) line: 92
NativeJavaTopPackage(NativeJavaPackage).getPkgProperty(String, Scriptable, 
boolean) line: 159
NativeJavaTopPackage(NativeJavaPackage).get(String, Scriptable) line: 114
NativeJavaTopPackage.init(Context, Scriptable, boolean) line: 128
GeneratedMethodAccessor32.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available
Method.invoke(Object, Object...) line: not available
ScriptableObject.buildClassCtor(Scriptable, Class<T>, boolean, boolean) line: 
1030
LazilyLoadedCtor.buildValue() line: 110 LazilyLoadedCtor.init() line: 89
ImporterTopLevel(ScriptableObject).getImpl(String, int, Scriptable) line: 2032
ImporterTopLevel(ScriptableObject).get(String, Scriptable) line: 287
ImporterTopLevel(IdScriptableObject).get(String, Scriptable) line: 387
ImporterTopLevel.get(String, Scriptable) line: 131
ScriptableObject.getProperty(Scriptable, String) line: 1617 
ScriptRuntime.topScopeName(Context, Scriptable, String) line: 1788
ScriptRuntime.name(Context, Scriptable, String) line: 1690
c8._c0(c8, Context, Scriptable, Scriptable, Object[]) line: 36
c8.call(Context, Scriptable, Scriptable, Object[]) line: not available
Butterfly$ButterflyContextFactory(ContextFactory).doTopCall(Callable, Context, 
Scriptable, Scriptable, Object[]) line: 398
ScriptRuntime.doTopCall(Callable, Context, Scriptable, Scriptable, Object[]) 
line: 3065 c8.call(Context, Scriptable, Scriptable, Object[]) line: not 
available
c8.exec(Context, Scriptable) line: not available
ButterflyModuleImpl.initScope(Context, Scriptable) line: 619
ButterflyModuleImpl$Controller.run(Context) line: 375
Context.call(ContextFactory, ContextAction) line: 515
Butterfly$ButterflyContextFactory(ContextFactory).call(ContextAction) line: 507 
ButterflyModuleImpl.processScript(String, HttpServletRequest, 
HttpServletResponse) line: 650
ButterflyModuleImpl.process(String, HttpServletRequest, HttpServletResponse) 
line: 427
RefineServlet(Butterfly).service(HttpServletRequest, HttpServletResponse) line: 
516 RefineServlet.service(HttpServletRequest, HttpServletResponse) line: 200
RefineServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 820
ServletHolder.handle(ServletRequest, ServletResponse) line: 511 
ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1166 
GzipFilter(UserAgentFilter).doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 81 GzipFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 132 ServletHandler$CachedChain.doFilter(ServletRequest, 
ServletResponse) line: 1157 ServletHandler.handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 388
SecurityHandler.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 216
SessionHandler.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 182
WebAppContext(ContextHandler).handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 765
WebAppContext.handle(String, HttpServletRequest, HttpServletResponse, int) 
line: 418
RefineServer(HandlerWrapper).handle(String, HttpServletRequest, 
HttpServletResponse, int) line: 152 RefineServer(Server).handle(HttpConnection) 
line: 326
HttpConnection.handleRequest() line: 542
HttpConnection$RequestHandler.headerComplete() line: 923
HttpParser.parseNext() line: 547
HttpParser.parseAvailable() line: 212
HttpConnection.handle() line: 404
SocketConnector$Connection.run() line: 228
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: not available 
ThreadPoolExecutor$Worker.run() line: not available Thread.run() line: not 
available

Original issue reported on code.google.com by tfmorris on 7 Mar 2013 at 2:58

GoogleCodeExporter commented 9 years ago
Looks like the asterisks denoting the synchronized methods didn't transfer.  
You can see them on the original bug report.

Sounds like it could be related to the deadlock scenario described in this 
article about Java 7 multithreaded class loader improvements: 
http://docs.oracle.com/javase/7/docs/technotes/guides/lang/cl-mt.html 

Original comment by tfmorris on 19 Aug 2013 at 4:50