Stop the connection in onStop() to try to avoid deadlocks due to surface loss. Also avoid calling stopConnection() from connection listener callbacks due to deadlock risk.

This commit is contained in:
Cameron Gutman 2017-06-05 20:33:23 -07:00
parent 96dfe25a14
commit d1e41e41a1

View File

@ -420,6 +420,17 @@ public class Game extends Activity implements SurfaceHolder.Callback,
unbindService(usbDriverServiceConnection); unbindService(usbDriverServiceConnection);
} }
// Destroy the capture provider
inputCaptureProvider.destroy();
}
@Override
protected void onStop() {
super.onStop();
SpinnerDialog.closeDialogs(this);
Dialog.closeDialogs();
if (conn != null) { if (conn != null) {
int videoFormat = decoderRenderer.getActiveVideoFormat(); int videoFormat = decoderRenderer.getActiveVideoFormat();
@ -453,14 +464,6 @@ public class Game extends Activity implements SurfaceHolder.Callback,
Toast.makeText(this, message, Toast.LENGTH_LONG).show(); Toast.makeText(this, message, Toast.LENGTH_LONG).show();
} }
} }
}
@Override
protected void onStop() {
super.onStop();
SpinnerDialog.closeDialogs(this);
Dialog.closeDialogs();
finish(); finish();
} }
@ -893,12 +896,6 @@ public class Game extends Activity implements SurfaceHolder.Callback,
connecting = connected = false; connecting = connected = false;
conn.stop(); conn.stop();
} }
// Enable cursor visibility again
inputCaptureProvider.disableCapture();
// Destroy the capture provider
inputCaptureProvider.destroy();
} }
@Override @Override
@ -908,11 +905,13 @@ public class Game extends Activity implements SurfaceHolder.Callback,
spinner = null; spinner = null;
} }
// Enable cursor visibility again
inputCaptureProvider.disableCapture();
if (!displayedFailureDialog) { if (!displayedFailureDialog) {
displayedFailureDialog = true; displayedFailureDialog = true;
LimeLog.severe(stage+" failed: "+errorCode); LimeLog.severe(stage+" failed: "+errorCode);
stopConnection();
Dialog.displayDialog(this, getResources().getString(R.string.conn_error_title), Dialog.displayDialog(this, getResources().getString(R.string.conn_error_title),
getResources().getString(R.string.conn_error_msg)+" "+stage, true); getResources().getString(R.string.conn_error_msg)+" "+stage, true);
} }
@ -920,11 +919,13 @@ public class Game extends Activity implements SurfaceHolder.Callback,
@Override @Override
public void connectionTerminated(long errorCode) { public void connectionTerminated(long errorCode) {
// Enable cursor visibility again
inputCaptureProvider.disableCapture();
if (!displayedFailureDialog) { if (!displayedFailureDialog) {
displayedFailureDialog = true; displayedFailureDialog = true;
LimeLog.severe("Connection terminated: "+errorCode); LimeLog.severe("Connection terminated: "+errorCode);
stopConnection();
Dialog.displayDialog(this, getResources().getString(R.string.conn_terminated_title), Dialog.displayDialog(this, getResources().getString(R.string.conn_terminated_title),
getResources().getString(R.string.conn_terminated_msg), true); getResources().getString(R.string.conn_terminated_msg), true);
} }