+1
−1
Loading
Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more
UserController calls SystemServiceManager on some stages of the user switch lifecycle, and SystemServiceManager calls the respective callbacks in the SystemService objects it manage. Prior to Android 11, these callbacks would take a @UserIdInt userid, but now they take a TargetUser (which in turns contains a Userinfo). So, currently, UserController calls SystemServiceManager passing the userid, and SystemServiceManager gets the UserInfo from UserManagerService. That works fine most of the time, but there might be some race conditions when a user is removed that can crash the system when such user is stopped (because UserManagerService doesn't have its UserInfo anymore). This CL fixes this issue by refactoring the user switch workflow so: - TargetUser doesn't hold a reference to the UserInfo anymore, but offer the methods needed by SystemService implementations. - SystemServiceManager keeps track of the TargetUser objects used in the callbacks. Test: manual verification Fixes: 159831354 Change-Id: If68ab1b5e247c7389c8cac16432d8b8809507e86