| Index: src/org/adblockplus/android/api/JniExceptionHandler.java |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/src/org/adblockplus/android/api/JniExceptionHandler.java |
| @@ -0,0 +1,52 @@ |
| +package org.adblockplus.android.api; |
| + |
| +import java.util.concurrent.LinkedBlockingQueue; |
| + |
| +public final class JniExceptionHandler |
| +{ |
| + private static LogWorker logWorker = null; |
| + |
| + static |
| + { |
| + logWorker = new LogWorker(); |
| + final Thread t = new Thread(logWorker); |
| + t.setDaemon(true); |
| + t.start(); |
| + } |
| + |
| + public static void logException(final Throwable t) |
| + { |
| + logWorker.logException(t); |
| + } |
| + |
| + private final static class LogWorker implements Runnable |
| + { |
| + LinkedBlockingQueue<Throwable> exceptionQueue = new LinkedBlockingQueue<Throwable>(); |
| + |
| + private void logException(final Throwable t) |
| + { |
| + this.exceptionQueue.offer(t); |
| + } |
| + |
| + @Override |
| + public void run() |
| + { |
| + for (;;) |
| + { |
| + try |
| + { |
| + final Throwable t = this.exceptionQueue.take(); |
| + System.err.println("EXCEPTION: " + t); |
| + } |
| + catch (final InterruptedException ie) |
| + { |
| + break; |
| + } |
| + catch (final Throwable ex) |
| + { |
| + // TODO: Swallow or log? |
| + } |
| + } |
| + } |
| + } |
| +} |