summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorSuchi Amalapurapu <asuchitra@google.com>2010-04-14 20:25:48 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-04-14 20:25:48 -0700
commit0751d1eaad55603eaeb0f035a55935f713ab0476 (patch)
tree735eb4068886e1d6315181af65a067eff7a42c0f /services
parent68ca59e9e69ab4c997987fb0390382a2461386eb (diff)
parentdeb69370ef9a786940ae49411ba657410361b4f1 (diff)
downloadframeworks_base-0751d1eaad55603eaeb0f035a55935f713ab0476.zip
frameworks_base-0751d1eaad55603eaeb0f035a55935f713ab0476.tar.gz
frameworks_base-0751d1eaad55603eaeb0f035a55935f713ab0476.tar.bz2
am deb69370: Revert "Add ordered broadcast when removing packages." Couple of cosmetic fixes as well.
Merge commit 'deb69370ef9a786940ae49411ba657410361b4f1' into froyo-plus-aosp * commit 'deb69370ef9a786940ae49411ba657410361b4f1': Revert "Add ordered broadcast when removing packages."
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/PackageManagerService.java56
1 files changed, 27 insertions, 29 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index b7ab9fe..e5b870b 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -570,15 +570,14 @@ class PackageManagerService extends IPackageManager.Stub {
if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1);
PostInstallData data = mRunningInstalls.get(msg.arg1);
mRunningInstalls.delete(msg.arg1);
+ boolean deleteOld = false;
if (data != null) {
InstallArgs args = data.args;
PackageInstalledInfo res = data.res;
if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
- res.removedInfo.sendBroadcast(false, true,
- new PackageRemovedIntentReceiver(res.removedInfo.args,
- res.removedInfo.args != null));
+ res.removedInfo.sendBroadcast(false, true);
Bundle extras = new Bundle(1);
extras.putInt(Intent.EXTRA_UID, res.uid);
final boolean update = res.removedInfo.removedPackage != null;
@@ -593,6 +592,18 @@ class PackageManagerService extends IPackageManager.Stub {
res.pkg.applicationInfo.packageName,
extras, null);
}
+ if (res.removedInfo.args != null) {
+ // Remove the replaced package's older resources safely now
+ deleteOld = true;
+ }
+ }
+ // Force a gc to clear up things
+ Runtime.getRuntime().gc();
+ // We delete after a gc for applications on sdcard.
+ if (deleteOld) {
+ synchronized (mInstallLock) {
+ res.removedInfo.args.doPostDeleteLI(true);
+ }
}
if (args.observer != null) {
try {
@@ -6065,8 +6076,7 @@ class PackageManagerService extends IPackageManager.Stub {
if(res && sendBroadCast) {
boolean systemUpdate = info.isRemovedPackageSystemUpdate;
- info.sendBroadcast(deleteCodeAndResources, systemUpdate,
- new PackageRemovedIntentReceiver(info.args, deleteCodeAndResources));
+ info.sendBroadcast(deleteCodeAndResources, systemUpdate);
// If the removed package was a system update, the old system packaged
// was re-enabled; we need to broadcast this information
@@ -6079,28 +6089,18 @@ class PackageManagerService extends IPackageManager.Stub {
sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras, null);
}
}
- return res;
- }
-
- class PackageRemovedIntentReceiver extends IIntentReceiver.Stub {
- boolean deleteOld;
- InstallArgs args;
- PackageRemovedIntentReceiver(InstallArgs args, boolean deleteOld) {
- this.args = args;
- this.deleteOld = deleteOld;
- }
- public void performReceive(Intent intent, int resultCode, String data, Bundle extras,
- boolean ordered, boolean sticky) throws RemoteException {
- // Force a gc to clear up things
- Runtime.getRuntime().gc();
- // We delete after a gc for applications on sdcard.
- if (deleteOld && args != null) {
- synchronized (mInstallLock) {
- args.doPostDeleteLI(true);
- }
+ // Force a gc here.
+ Runtime.getRuntime().gc();
+ // Delete the resources here after sending the broadcast to let
+ // other processes clean up before deleting resources.
+ if (info.args != null) {
+ synchronized (mInstallLock) {
+ info.args.doPostDeleteLI(deleteCodeAndResources);
}
}
+ return res;
}
+
static class PackageRemovedInfo {
String removedPackage;
int uid = -1;
@@ -6109,8 +6109,7 @@ class PackageManagerService extends IPackageManager.Stub {
// Clean up resources deleted packages.
InstallArgs args = null;
- void sendBroadcast(boolean fullRemove, boolean replacing,
- IIntentReceiver finishedReceiver) {
+ void sendBroadcast(boolean fullRemove, boolean replacing) {
Bundle extras = new Bundle(1);
extras.putInt(Intent.EXTRA_UID, removedUid >= 0 ? removedUid : uid);
extras.putBoolean(Intent.EXTRA_DATA_REMOVED, fullRemove);
@@ -6118,7 +6117,7 @@ class PackageManagerService extends IPackageManager.Stub {
extras.putBoolean(Intent.EXTRA_REPLACING, true);
}
if (removedPackage != null) {
- sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED, removedPackage, extras, finishedReceiver);
+ sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED, removedPackage, extras, null);
}
if (removedUid >= 0) {
sendPackageBroadcast(Intent.ACTION_UID_REMOVED, null, extras, null);
@@ -9759,7 +9758,7 @@ class PackageManagerService extends IPackageManager.Stub {
}
}
if (returnCode != PackageManager.MOVE_SUCCEEDED) {
- processPendingMove(new MoveParams(null, observer, 0, null), returnCode);
+ processPendingMove(new MoveParams(null, observer, 0, packageName), returnCode);
} else {
Message msg = mHandler.obtainMessage(INIT_COPY);
InstallArgs srcArgs = createInstallArgs(currFlags, pkg.applicationInfo.sourceDir,
@@ -9800,7 +9799,6 @@ class PackageManagerService extends IPackageManager.Stub {
}
if (returnCode == PackageManager.MOVE_SUCCEEDED) {
// Send resources unavailable broadcast
- // TODO Add an ordered broadcast receiver here.
sendResourcesChangedBroadcast(false, pkgList, uidArr, null);
// Update package code and resource paths
synchronized (mInstallLock) {