# HG changeset patch # Parent d8760ea9bd825818c96dd20d00a245c6ed5c5f1c diff --git a/embedding/android/GeckoAppShell.java b/embedding/android/GeckoAppShell.java --- a/embedding/android/GeckoAppShell.java +++ b/embedding/android/GeckoAppShell.java @@ -45,6 +45,7 @@ import java.text.*; import java.util.*; import java.util.zip.*; import java.util.concurrent.locks.*; +import java.util.concurrent.*; import android.os.*; import android.app.*; @@ -477,35 +478,23 @@ public class GeckoAppShell imm, text, start, end, newEnd); } - private static final ReentrantLock mGeckoSyncLock = new ReentrantLock(); - private static final Condition mGeckoSyncCond = mGeckoSyncLock.newCondition(); - private static boolean mGeckoSyncAcked; + private static SynchronousQueue sGeckoSyncQueue = + new SynchronousQueue(); // Block the current thread until the Gecko event loop is caught up public static void geckoEventSync() { GeckoAppShell.sendEventToGecko( new GeckoEvent(GeckoEvent.GECKO_EVENT_SYNC)); - mGeckoSyncLock.lock(); - mGeckoSyncAcked = false; - while (!mGeckoSyncAcked) { - try { - mGeckoSyncCond.await(); - } catch (InterruptedException e) { - break; - } - } - mGeckoSyncLock.unlock(); + try { + Integer i = sGeckoSyncQueue.take(); + } catch (InterruptedException e) {} } - + // Signal the Java thread that it's time to wake up public static void acknowledgeEventSync() { - mGeckoSyncLock.lock(); - mGeckoSyncAcked = true; try { - mGeckoSyncCond.signal(); - } finally { - mGeckoSyncLock.unlock(); - } + sGeckoSyncQueue.put(new Integer(0)); + } catch (InterruptedException e) {} } public static void enableAccelerometer(boolean enable) {