• Andrew Twyman's avatar
    Add @autorelease pool in ObjC proxy destructors · 7f9bfef5
    Andrew Twyman authored
    This is fixing a memory leak found in Dropbox's iOS networking libraries. Some ObjC objects were being autoreleased into a pool which is never flushed (the top-level pool on a C++-owned thread. This was Djinni violating its contracts around language isolation. The root cause turned out to be the destructor of an ObjcProxy object. Since it's called directly from C++, and does all its work in destructors, it was manipulating ObjC objects without an @autoreleasepool.
    
    The fix is more complex than I'd like due to the need to arrange for destructors to run inside of an @autorelease block, which forces an awkward code structure. Furthermore, I can't use optional without knowing what namespace to look in to find nullopt, which isn't easily extractable from Djinni's current usage, so I had to write my own. I'd very much like to find a simpler fix, so suggested follow-on diffs are welcome.
    7f9bfef5
DJIObjcWrapperCache+Private.h 4.44 KB