Revision: 6366
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6366&view=rev
Author: wis775
Date: 2011-08-18 18:46:21 +0000 (Thu, 18 Aug 2011)
Log Message:
-----------
Added Gerd's patch for improving OutOfMemoryError handling
Modified Paths:
--------------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/Main.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/SQLExecuterTask.java
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/Main.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/Main.java 2011-08-18 18:38:44 UTC (rev 6365)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/Main.java 2011-08-18 18:46:21 UTC (rev 6366)
@@ -1,6 +1,6 @@
package net.sourceforge.squirrel_sql.client;
-import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.fw.util.Utilities;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
import net.sourceforge.squirrel_sql.fw.util.log.SystemOutToLog;
@@ -87,29 +87,24 @@
EventQueue q = Toolkit.getDefaultToolkit().getSystemEventQueue();
+
q.push(new EventQueue()
{
- OutOfMemoryErrorHandler oumErrorHandler = new OutOfMemoryErrorHandler();
+ OutOfMemoryErrorHandler oumErrorHandler = new OutOfMemoryErrorHandler();
+
protected void dispatchEvent(AWTEvent event)
{
try
{
super.dispatchEvent(event);
}
- catch (OutOfMemoryError e) {
- // We have to set the application by a lazy way, because it is created in a runnable.
- oumErrorHandler.setApplication(application);
- oumErrorHandler.handleOutOfMemoryError();
- }
- catch (Throwable t)
+ catch (Throwable e)
{
- if (s_log.isDebugEnabled())
- {
- t.printStackTrace();
- }
- s_log.error("Exception occured dispatching Event " + event, t);
+ doLogging(event, e);
+ doOutOfMemory(event, e, oumErrorHandler);
}
}
+
});
@@ -127,4 +122,30 @@
SwingUtilities.invokeLater(runnable);
}
-}
+ private static void doLogging(AWTEvent event, Throwable t)
+ {
+ if (s_log.isDebugEnabled())
+ {
+ t.printStackTrace();
+ }
+ s_log.error("Exception occured dispatching Event " + event, t);
+ }
+
+ private static void doOutOfMemory(AWTEvent event, Throwable e, OutOfMemoryErrorHandler oumErrorHandler)
+ {
+ if (Utilities.getDeepestThrowable(e) instanceof OutOfMemoryError)
+ {
+ try
+ {
+ // We have to set the application by a lazy way, because it is created in a runnable.
+ oumErrorHandler.setApplication(application);
+ oumErrorHandler.handleOutOfMemoryError();
+ }
+ catch (Throwable t)
+ {
+ doLogging(event, t);
+ }
+ }
+ }
+
+}
\ No newline at end of file
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/SQLExecuterTask.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/SQLExecuterTask.java 2011-08-18 18:38:44 UTC (rev 6365)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/SQLExecuterTask.java 2011-08-18 18:46:21 UTC (rev 6366)
@@ -266,7 +266,7 @@
}
}
}
- catch (Throwable ex)
+ catch (final Throwable ex)
{
if(props.getAbortOnError() && 1 < statementCount)
{
@@ -280,6 +280,7 @@
if(false == ex instanceof SQLException)
{
s_log.error("Unexpected exception when executing SQL: " + ex, ex);
+ enableEventQueueOutOfMemoryHandling(ex);
}
}
@@ -323,6 +324,22 @@
}
}
+ private void enableEventQueueOutOfMemoryHandling(final Throwable ex)
+ {
+ if(ex instanceof OutOfMemoryError)
+ {
+ Runnable runnable = new Runnable()
+ {
+ public void run()
+ {
+ throw new RuntimeException(ex);
+ }
+ };
+
+ SwingUtilities.invokeLater(runnable);
+ }
+ }
+
/**
* Set the fetchSize Arrtibute for the SQL-Statement;
*/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|