Details
-
Bug
-
Resolution: Fixed
-
High
-
3.8
-
None
-
3.08
-
Description
Quoting the error description:
I can confirm that the cvs components of JIRA do indirectly attempt close the logs, resulting in a close of System.err, which, due to tomcat invocation redirection, is the same as stdout. I have attached a wrapping Stream to stderr that dumps a stacktrace whenever someone attempts to close it. Here is it's output (there are plenty of those at JIRA startup):
java.lang.Exception: Someone tried to close the stream System.err at be.rmi.intranet.tomcat.IOGuardianListener$GuardedStream.close(IOGuardianListener.java:95) at org.apache.jasper.util.SystemLogHandler.close(SystemLogHandler.java:123) at org.apache.jasper.util.SystemLogHandler.close(SystemLogHandler.java:123) at org.apache.jasper.util.SystemLogHandler.close(SystemLogHandler.java:123) at com.jcraft.jsch.IO.close(Unknown Source) at com.jcraft.jsch.Channel.disconnect(Unknown Source) at org.netbeans.lib.cvsclient.connection.ExtConnection.close(Unknown Source) at com.atlassian.jira.vcs.cvsimpl.CvsRepositoryUtilImpl.updateCvs(CvsRepositoryUtilImpl.java:427) at com.atlassian.jira.vcs.cvsimpl.CvsRepository.updateCvs(CvsRepository.java:232) at com.atlassian.jira.vcs.cvsimpl.CvsRepository.updateRepository(CvsRepository.java:287) at com.atlassian.jira.vcs.DefaultRepositoryManager.updateRepository(DefaultRepositoryManager.java:547) at com.atlassian.jira.vcs.DefaultRepositoryManager.updateRepositories(DefaultRepositoryManager.java:500) at com.atlassian.jira.service.services.vcs.VcsService.run(VcsService.java:54) at com.atlassian.jira.service.JiraServiceContainerImpl.run(JiraServiceContainerImpl.java:67) at com.atlassian.jira.service.ServiceRunner.execute(ServiceRunner.java:48) at org.quartz.core.JobRunShell.run(JobRunShell.java:191) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:516)Here is, basically, the code used to 'guard' System.err stream:
PrintStream err = System.err; err.flush(); System.setErr(new GuardedStream(err,"System.err"));GuardedStream follows simply the delegation pattern, except for close() where it refuses the close() operation and dumps a stacktrace to stdout.