diff options
| -rw-r--r-- | core/java/android/util/EventLog.java | 6 | ||||
| -rw-r--r-- | services/java/com/android/server/BackupManagerService.java | 66 |
2 files changed, 38 insertions, 34 deletions
diff --git a/core/java/android/util/EventLog.java b/core/java/android/util/EventLog.java index 0f0be7987ebc..81dd96e12884 100644 --- a/core/java/android/util/EventLog.java +++ b/core/java/android/util/EventLog.java @@ -124,10 +124,6 @@ public class EventLog { "A List must have fewer than " + Byte.MAX_VALUE + " items in it."); } - if (items.length < 1) { - throw new IllegalArgumentException( - "A List must have at least one item in it."); - } for (int i = 0; i < items.length; i++) { final Object item = items[i]; if (item == null) { @@ -223,7 +219,7 @@ public class EventLog { case LIST: if (mBuffer.remaining() < 1) return null; int length = mBuffer.get(); - if (length <= 0) return null; + if (length < 0) return null; Object[] array = new Object[length]; for (int i = 0; i < length; ++i) { array[i] = decodeObject(); diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java index a8e5f8bf637e..67f38163ef9f 100644 --- a/services/java/com/android/server/BackupManagerService.java +++ b/services/java/com/android/server/BackupManagerService.java @@ -803,7 +803,7 @@ class BackupManagerService extends IBackupManager.Stub { class ClearDataObserver extends IPackageDataObserver.Stub { public void onRemoveCompleted(String packageName, boolean succeeded) - throws android.os.RemoteException { + throws RemoteException { synchronized(mClearDataLock) { mClearingData = false; mClearDataLock.notifyAll(); @@ -1666,58 +1666,66 @@ class BackupManagerService extends IBackupManager.Stub { } // --- Binder interface --- - public RestoreSet[] getAvailableRestoreSets() throws android.os.RemoteException { + public synchronized RestoreSet[] getAvailableRestoreSets() { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, "getAvailableRestoreSets"); try { - synchronized(this) { if (mRestoreTransport == null) { Log.w(TAG, "Null transport getting restore sets"); - } else if (mRestoreSets == null) { // valid transport; do the one-time fetch + return null; + } + if (mRestoreSets == null) { // valid transport; do the one-time fetch mRestoreSets = mRestoreTransport.getAvailableRestoreSets(); if (mRestoreSets == null) EventLog.writeEvent(RESTORE_TRANSPORT_FAILURE_EVENT); } return mRestoreSets; - } - } catch (RuntimeException e) { - Log.d(TAG, "getAvailableRestoreSets exception"); - e.printStackTrace(); - throw e; + } catch (Exception e) { + Log.e(TAG, "Error in getAvailableRestoreSets", e); + return null; } } - public int performRestore(long token, IRestoreObserver observer) - throws android.os.RemoteException { - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, "performRestore"); + public synchronized int performRestore(long token, IRestoreObserver observer) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, + "performRestore"); - Log.d(TAG, "performRestore token=" + token + " observer=" + observer); + if (DEBUG) Log.d(TAG, "performRestore token=" + token + " observer=" + observer); - if (mRestoreSets != null) { - for (int i = 0; i < mRestoreSets.length; i++) { - if (token == mRestoreSets[i].token) { - mWakelock.acquire(); - Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE); - msg.obj = new RestoreParams(mRestoreTransport, observer, token); - mBackupHandler.sendMessage(msg); - return 0; - } + if (mRestoreTransport == null || mRestoreSets == null) { + Log.e(TAG, "Ignoring performRestore() with no restore set"); + return -1; + } + + for (int i = 0; i < mRestoreSets.length; i++) { + if (token == mRestoreSets[i].token) { + mWakelock.acquire(); + Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE); + msg.obj = new RestoreParams(mRestoreTransport, observer, token); + mBackupHandler.sendMessage(msg); + return 0; } - } else { - if (DEBUG) Log.v(TAG, "No current restore set, not doing restore"); } return -1; } - public void endRestoreSession() throws android.os.RemoteException { + public synchronized void endRestoreSession() { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, "endRestoreSession"); - Log.d(TAG, "endRestoreSession"); + if (DEBUG) Log.d(TAG, "endRestoreSession"); + + synchronized (this) { + try { + if (mRestoreTransport != null) mRestoreTransport.finishRestore(); + } catch (Exception e) { + Log.e(TAG, "Error in finishRestore", e); + } finally { + mRestoreTransport = null; + } + } - mRestoreTransport.finishRestore(); - mRestoreTransport = null; - synchronized(BackupManagerService.this) { + synchronized (BackupManagerService.this) { if (BackupManagerService.this.mActiveRestoreSession == this) { BackupManagerService.this.mActiveRestoreSession = null; } else { |