This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 226881 - Infinite loop resulting in StackOverflowError
Summary: Infinite loop resulting in StackOverflowError
Status: RESOLVED INCOMPLETE
Alias: None
Product: versioncontrol
Classification: Unclassified
Component: Subversion (show other bugs)
Version: 7.2
Hardware: PC Windows XP
: P1 normal (vote)
Assignee: Cibor
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-03-01 08:56 UTC by Cibor
Modified: 2013-03-28 08:00 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments
IDE logs (251.18 KB, text/plain)
2013-03-07 09:46 UTC, Cibor
Details
IDE logs, FINE level (57.61 KB, text/plain)
2013-03-27 10:00 UTC, Cibor
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Cibor 2013-03-01 08:56:04 UTC
After I open a big Maven project (some 60 000 classes with millions line of code) background scanning stops at 96%. A peak into IDE logs reveals that a thread went into an infinite loop:

SEVERE [org.openide.util.RequestProcessor]: Error in RequestProcessor org.netbeans.modules.subversion.Subversion$2
java.lang.StackOverflowError
	at java.util.ArrayList.get(ArrayList.java:322)
	at org.antlr.runtime.ANTLRStringStream.mark(ANTLRStringStream.java:162)
	at org.antlr.runtime.DFA.predict(DFA.java:68)
	at org.tmatesoft.sqljet.core.internal.lang.SqlLexer.mTokens(SqlLexer.java:7424)
	at org.antlr.runtime.Lexer.nextToken(Lexer.java:89)
	at org.antlr.runtime.BufferedTokenStream.fetch(BufferedTokenStream.java:133)
	at org.antlr.runtime.BufferedTokenStream.sync(BufferedTokenStream.java:127)
	at org.antlr.runtime.CommonTokenStream.consume(CommonTokenStream.java:67)
	at org.antlr.runtime.DFA.predict(DFA.java:120)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.atom_expr(SqlParser.java:3916)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.unary_subexpr(SqlParser.java:3768)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.con_subexpr(SqlParser.java:3593)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.mul_subexpr(SqlParser.java:3475)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.add_subexpr(SqlParser.java:3366)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.bit_subexpr(SqlParser.java:3257)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.neq_subexpr(SqlParser.java:3148)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.eq_subexpr(SqlParser.java:3039)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.and_subexpr(SqlParser.java:1806)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.or_subexpr(SqlParser.java:1715)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.expr(SqlParser.java:1622)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.atom_expr(SqlParser.java:4127)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.unary_subexpr(SqlParser.java:3768)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.con_subexpr(SqlParser.java:3593)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.mul_subexpr(SqlParser.java:3475)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.add_subexpr(SqlParser.java:3366)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.bit_subexpr(SqlParser.java:3257)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.neq_subexpr(SqlParser.java:3148)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.eq_subexpr(SqlParser.java:3039)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.and_subexpr(SqlParser.java:1806)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.or_subexpr(SqlParser.java:1715)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.expr(SqlParser.java:1622)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.result_column(SqlParser.java:8243)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.select_core(SqlParser.java:7778)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.select_list(SqlParser.java:7466)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.select_stmt(SqlParser.java:7169)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.cond_expr(SqlParser.java:2486)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.and_subexpr(SqlParser.java:1820)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.or_subexpr(SqlParser.java:1715)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.expr(SqlParser.java:1622)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.select_core(SqlParser.java:7863)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.select_list(SqlParser.java:7466)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.select_stmt(SqlParser.java:7169)
	at org.tmatesoft.sqljet.core.internal.lang.SqlParser.create_view_stmt(SqlParser.java:15261)
	at org.tmatesoft.sqljet.core.internal.schema.SqlJetSchema.parseView(SqlJetSchema.java:422)
	at org.tmatesoft.sqljet.core.internal.schema.SqlJetSchema.readShema(SqlJetSchema.java:354)
	at org.tmatesoft.sqljet.core.internal.schema.SqlJetSchema.init(SqlJetSchema.java:168)
	at org.tmatesoft.sqljet.core.internal.schema.SqlJetSchema.<init>(SqlJetSchema.java:154)
	at org.tmatesoft.sqljet.core.table.engine.SqlJetEngine$2.runSynchronized(SqlJetEngine.java:282)
	at org.tmatesoft.sqljet.core.table.engine.SqlJetEngine.runSynchronized(SqlJetEngine.java:217)
	at org.tmatesoft.sqljet.core.table.engine.SqlJetEngine.readSchema(SqlJetEngine.java:276)
	at org.tmatesoft.sqljet.core.table.engine.SqlJetEngine.getOptions(SqlJetEngine.java:299)
	at org.tmatesoft.svn.core.internal.wc17.db.SVNWCDbRoot.<init>(SVNWCDbRoot.java:73)
	at org.tmatesoft.svn.core.internal.wc17.db.SVNWCDb.parseDir(SVNWCDb.java:1519)
	at org.tmatesoft.svn.core.internal.wc17.db.SVNWCDb.obtainWcRoot(SVNWCDb.java:4760)
	at org.tmatesoft.svn.core.internal.wc17.db.SVNWCDb.obtainWcRoot(SVNWCDb.java:4754)
	at org.tmatesoft.svn.core.internal.wc17.db.SVNWCDb.readInfo(SVNWCDb.java:2507)
	at org.tmatesoft.svn.core.internal.wc17.SVNWCContext.readKind(SVNWCContext.java:276)
	at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgGetStatus.run(SvnNgGetStatus.java:31)
	at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgGetStatus.run(SvnNgGetStatus.java:22)
	at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgOperationRunner.run(SvnNgOperationRunner.java:20)
	at org.tmatesoft.svn.core.internal.wc2.SvnOperationRunner.run(SvnOperationRunner.java:20)
	at org.tmatesoft.svn.core.wc2.SvnOperationFactory.run(SvnOperationFactory.java:1235)
	at org.tmatesoft.svn.core.wc2.SvnOperation.run(SvnOperation.java:291)
	at org.tmatesoft.svn.core.javahl17.SVNClientImpl.status(SVNClientImpl.java:268)
	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.getStatus(AbstractJhlClientAdapter.java:578)
	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.getStatus(AbstractJhlClientAdapter.java:558)
	at org.tigris.subversion.svnclientadapter.svnkit.SvnKitClientAdapter.getStatus(SvnKitClientAdapter.java:107)
	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.getStatus(AbstractJhlClientAdapter.java:529)
	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.getSingleStatus(AbstractJhlClientAdapter.java:520)
	at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.netbeans.modules.subversion.client.SvnClientInvocationHandler.handle(SvnClientInvocationHandler.java:366)
	at org.netbeans.modules.subversion.client.SvnClientInvocationHandler.invokeMethod(SvnClientInvocationHandler.java:327)
	at org.netbeans.modules.subversion.client.SvnClientInvocationHandler$2.call(SvnClientInvocationHandler.java:169)
	at org.netbeans.modules.subversion.client.SvnClientInvocationHandler.invoke(SvnClientInvocationHandler.java:181)
	at $Proxy33.getSingleStatus(Unknown Source)
	at org.netbeans.modules.subversion.util.SvnUtils.getSingleStatus(SvnUtils.java:782)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:567)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:500)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:633)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:500)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:633)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:500)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:633)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:500)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:633)
	at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:500)


... and so on until ...

		at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:633)
[catch] at org.netbeans.modules.subversion.FileStatusCache.refresh(FileStatusCache.java:500)

Product Version: NetBeans IDE 7.2 (Build 201207171143)
Java: 1.6.0_26; Java HotSpot(TM) Client VM 20.1-b02
System: Windows XP version 5.1 running on x86; Cp1252; en_US (nb)

Konrad Ciborowski
Krakow, Poland
Comment 1 Tomas Zezula 2013-03-04 10:53:10 UTC
The problem is in org.tmatesoft.sqljet.core.internal.lang.SqlParser called from org.netbeans.modules.subversion.client.SvnClientInvocationHandler.handle
Comment 2 Ondrej Vrabec 2013-03-04 11:08:04 UTC
Can you attach the full IDE log? How many levels in the source tree do you have? Are there cyclic symlinks in the source tree?
Comment 3 Ondrej Vrabec 2013-03-04 15:07:44 UTC
After you reply to my questions, also please try to run the IDE with -J-Dversioning.subversion.doNotFollowSymlinks=true and let me know if it helps.
Comment 4 Cibor 2013-03-07 09:46:42 UTC
Created attachment 132320 [details]
IDE logs

I'm attaching the IDE logs. I'm not aware of any symlinks in the source tree (find . -type l returns nothing on the UNIX copy of the repository though I'm working on Windows). 

Running netbeans with -J-Dversioning.subversion.doNotFollowSymlinks=true did't make any difference.

Best regards,
Konrad Ciborowski
Comment 5 Ondrej Vrabec 2013-03-07 10:06:50 UTC
adding some additional logging: http://hg.netbeans.org/core-main/rev/a32ad648d271
Please when the changeset makes it to a daily build, download the daily build and start it with -J-Dorg.netbeans.modules.subversion.FileStatusCache.level=FINE
When it trows the error, attach the messages.log again. Thanks a lot.
Comment 6 Quality Engineering 2013-03-08 02:02:11 UTC
Integrated into 'main-golden', will be available in build *201303072300* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress)
Changeset: http://hg.netbeans.org/main-golden/rev/a32ad648d271
User: Ondrej Vrabec <ovrabec@netbeans.org>
Log: #226881 - Infinite loop resulting in StackOverflowError
adding additional logging
Comment 7 Cibor 2013-03-27 10:00:05 UTC
Created attachment 133119 [details]
IDE logs, FINE level

Sadly not much has changed in the logs.
Comment 8 Ondrej Vrabec 2013-03-27 10:11:34 UTC
(In reply to comment #7)
> Sadly not much has changed in the logs.
The exception is gone, no trace of it in the log. Attach the log when the exception occurs.
Comment 9 Cibor 2013-03-27 22:05:03 UTC
Sorry for not making myself clear. The exception may be gone but the background scanning still never ends. It halts at some 95%, the message "Scanning in progress, trying again in 10,000ms" keeps appearing in the logs every 10 seconds and nothing changes. Perhaps if I left the IDE alone for some time (10 min? 30 min? 2 hrs?) it would resume at some point, I don't know.
    It may very well be that the problem is the convoluted structure of the project itself (which defies logic to say the least) but nonetheless not being able to finish scanning feels like a bug - especially that it compiles by Maven outside outside the IDE.
    Unfortunately I am not allowed to publish the sources of the project here so cannot help you with any more details.

Best regards,
Konrad Ciborowski 
Kraków, Poland
Comment 10 Ondrej Vrabec 2013-03-28 08:00:18 UTC
> INFO [org.netbeans.modules.git.status]: GitInterceptor.refreshTask: Scanning in progress, trying again in 10,000ms
.. means versioning is waiting for the parsing/scanning to finish in order not to compete for hard drive.

Can you please:
- run the IDE (daily development build) with -J-Dversioning.delayscan.nolimit=true
- and make a profiler snapshot (guess a minute or two of the profiling will suffice) when the scanning stops at 95%? See http://wiki.netbeans.org/FitnessViaPartnership
- then please reopen the issue