iCepa / Tor.framework

Tor framework for the iCepa project
Other
249 stars 55 forks source link

Exiting Tor thread crashes certain devices #56

Closed Fonta1n3 closed 4 years ago

Fonta1n3 commented 4 years ago

The tor thread dies after the app goes into the background so I have been experimenting with how best to handle this. I finally resorted to force resigning the tor thread whenever the app goes into the background, and then automatically reconnecting tor when app enters foreground. This works great on my device and on all simulators, however on newer iPhone models it seems to cause a crash at the same time as the log outputs [notice] Interrupt: exiting cleanly.

I have seen this code in the OnionBrowser repo:

/**
    Experimental Tor shutdown.
    */
    func stopTor() {
        print("[\(String(describing: type(of: self)))] #stopTor")

        // Under the hood, TORController will SIGNAL SHUTDOWN and set it's channel to nil, so
        // we actually rely on that to stop Tor and reset the state of torController. (we can
        // SIGNAL SHUTDOWN here, but we can't reset the torController "isConnected" state.)
        torController?.disconnect()
        torController = nil

        // More cleanup
        torThread?.cancel()
        torThread = nil

        state = .stopped
    }

Have you had success with it? Do you have any idea why resigning the Tor thread may cause a crash on some devices but not others?

tladesignz commented 4 years ago

Yeah, actually that code works just fine for us. Check our AppDelegate for resuming:

https://github.com/OnionBrowser/OnionBrowser/blob/ba94a2420b333a215395e49596af227f36b1c06d/OnionBrowser/AppDelegate.swift#L213-L226

I'm curious: What's the difference to your code? When you change to our way, does everything work for you?

Just from your description, it sounds like a race condition. Maybe newer devices are too fast?

Fonta1n3 commented 4 years ago

The only difference between our code was the torThread.cancel(), I tried that too with the same result.

I am curious have you tested on iPhone 11 models?

I think you are correct, they are too damn fast. I am going to try one more method but will probably give up at that point as I am stumped, frustrating that it works so well on my device (but not my bosses/users).

tladesignz commented 4 years ago

Currently on iPhone XS. No problems there. Did you cross-check with Onion Browser? The one in the app store (2.4.0) contains that code.

There was also some upheaval with iOS 13.2. closing apps too fast:

https://www.imore.com/ios-132-may-have-broken-multitasking

Maybe that's related?

Fonta1n3 commented 4 years ago

It is happening on iOS 13.3. It is not effecting my device, it is one of my users so I can not really test properly with Onion Browser etc.

tladesignz commented 4 years ago

It is happening on iOS 13.3. It is not effecting my device, it is one of my users so I can not really test properly with Onion Browser etc.

Meeh. Sorry, I'm running out of ideas.

Fonta1n3 commented 4 years ago

I can confirm this crash is not replicated on latest Onion Browser with the same device. I will take a closer look. You can probably close this as it most likely my code that is the issue. When I find the issue I will share.

Fonta1n3 commented 4 years ago

0.4.3.5 fixed it :) Thank you