diff --git a/services/print/java/com/android/server/print/UserState.java b/services/print/java/com/android/server/print/UserState.java index 58833bee1b987..e8ae020c27284 100644 --- a/services/print/java/com/android/server/print/UserState.java +++ b/services/print/java/com/android/server/print/UserState.java @@ -597,6 +597,7 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks, PrintJobStateChangeListenerRecord record = mPrintJobStateChangeListenerRecords.get(i); if (record.listener.asBinder().equals(listener.asBinder())) { + record.destroy(); mPrintJobStateChangeListenerRecords.remove(i); break; } @@ -639,6 +640,7 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks, ListenerRecord record = mPrintServicesChangeListenerRecords.get(i); if (record.listener.asBinder().equals(listener.asBinder())) { + record.destroy(); mPrintServicesChangeListenerRecords.remove(i); break; } @@ -686,6 +688,7 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks, ListenerRecord record = mPrintServiceRecommendationsChangeListenerRecords.get(i); if (record.listener.asBinder().equals(listener.asBinder())) { + record.destroy(); mPrintServiceRecommendationsChangeListenerRecords.remove(i); break; } @@ -1285,6 +1288,10 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks, listener.asBinder().linkToDeath(this, 0); } + public void destroy() { + listener.asBinder().unlinkToDeath(this, 0); + } + @Override public void binderDied() { listener.asBinder().unlinkToDeath(this, 0); @@ -1302,6 +1309,10 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks, listener.asBinder().linkToDeath(this, 0); } + public void destroy() { + listener.asBinder().unlinkToDeath(this, 0); + } + @Override public void binderDied() { listener.asBinder().unlinkToDeath(this, 0);