Socket: Fix a nullptr dereference when operations are pending #12462
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes the crash mentioned in https://dolp.in/i13442.
I suppose it's introduced in #11767. Since the instance was moved to the kernel, it's destroyed when the kernel is. When the socket manager is destroyed so are its sockets which will abort pending operations. Pending operations relied on
GetIOS()
to abort them. However, this function will returnnullptr
on force shutdown becauses_ios.reset()
is called. So it wasn't able to call member functions of the IOS instance being destructed and was dereferencingnullptr
instead.I created a simple test case to reproduce the issue which is accepting a socket connection. You just need to run it (and not connect to it), then force shutdown the homebrew by pressing the stop button twice on the GUI which will crash Dolphin.
net_accept.zip
Ready to be reviewed & merged.