Skip to content
This repository has been archived by the owner on Oct 20, 2024. It is now read-only.

Fix an "unrecognized selector sent to instance" crash #79

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Commits on Nov 9, 2018

  1. Fix an "unrecognized selector sent to instance" crash

    An app using `PocketSocket` crashes occasionally with this information:
    
    ```
    Fatal Exception: NSInvalidArgumentException
    -[SomeDelegate webSocketDidFlushOutput:]: unrecognized selector sent to instance 0x123456789
    0  CoreFoundation                 0x88881ad8c __exceptionPreprocess
    …
    5  PocketSocket                   0x8888d5004 __43-[PSWebSocket notifyDelegateDidFlushOutput]_block_invoke (PSWebSocket.m:668)
    6  libdispatch.dylib              0x88880caa0 _dispatch_call_block_and_release
    …
    ```
    
    The `notifyDelegateDidFlushOutput` function checks if the delegate
    responds to the `webSocketDidFlushOutput:` selector before sending it.
    The only possible cause for the crash is when the delegate changes
    between the check and the call because the function is not atomic. Added
    `testChangingDelegateWhileFlushingOutputShouldNotCrashWithUnrecognizedSelector`
    can reproduce the crash very quickly and consistently.
    
    The fix here is to capture the delegate strongly while the function is
    running to work with the same instance. The patch fixes the crash in all
    similar places in `PSWebSocket`, as well as in `PSWebSocketServer`.
    eunikolsky committed Nov 9, 2018
    Configuration menu
    Copy the full SHA
    289e4f6 View commit details
    Browse the repository at this point in the history