From eb3b83ec48a5646fa853f9695d01fb5d47df1813 Mon Sep 17 00:00:00 2001 From: Andy2 <andy2@trand> Date: Thu, 3 Mar 2011 19:00:50 -0800 Subject: [PATCH] fix rare crash by tracking whether showDialog has been called and testing that before dismissing it. --- .../src/org/eehouse/android/xw4/BoardActivity.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java index f9a4408aa..33b1622ca 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java @@ -1215,8 +1215,15 @@ public class BoardActivity extends XWActivity }; } + /* m_blockingDlgPosted: very rarely m_forResultWait will get + * interrupted before the runnable gets run. In that case there's + * no dialog to dismiss. So track it. + */ + private boolean m_blockingDlgPosted; + private int waitBlockingDialog( final int dlgID, int cancelResult ) { + m_blockingDlgPosted = false; setBlockingThread(); int orient = m_currentOrient == Configuration.ORIENTATION_LANDSCAPE ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE @@ -1226,15 +1233,18 @@ public class BoardActivity extends XWActivity m_handler.post( new Runnable() { public void run() { showDialog( dlgID ); + m_blockingDlgPosted = true; } } ); try { m_forResultWait.acquire(); } catch ( java.lang.InterruptedException ie ) { - m_resultCode = cancelResult; - dismissDialog( dlgID ); Utils.logf( "waitBlockingDialog: got " + ie.toString() ); + m_resultCode = cancelResult; + if ( m_blockingDlgPosted ) { + dismissDialog( dlgID ); + } } clearBlockingThread(); return m_resultCode;