I think that perhaps we have a problem with the retain count flags in the definition of CFSTR. Previously the pinned reference would prevent the deallocation. This may have gotten clobbered with the latest CF import.
On Nov 29, 2017, at 7:55 PM, Brandon Williams via swift-corelibs-dev <swift-corelibs-dev@swift.org <mailto:swift-corelibs-dev@swift.org>> wrote:
Hey Tony,
We were able to fix our crashes by avoiding our uses of `URLQueryItem`s. In one place I had to completely remove the use of `URLQueryItem`:
Fix crashes in URLComponents by mbrandonw · Pull Request #79 · pointfreeco/swift-web · GitHub
And in another my colleague Stephen Celis discovered that duplicate keys in a query string can cause this to crash:
Fix another crash around URLComponents/URLQueryItem by stephencelis · Pull Request #80 · pointfreeco/swift-web · GitHub
He was able to come up with a minimal test case to demonstrate this:
Minimal test-case for https://bugs.swift.org/browse/SR-6422 · pointfreeco/swift-web@cfa9b51 · GitHub
And you can see the failure in this Travis CI report:
Travis CI - Test and Deploy with Confidence <Travis CI - Test and Deploy with Confidence;
At the bottom you’ll find:
```fatal error: Constant strings cannot be deallocated: file Foundation/NSCFString.swift, line 118```
So definitely seems to be in that area!
Now, as far as rebuilding swift-corelibs-foundation, I’m down to try but I dont really know much about how to do that. With some instructions I could give it a shot.
Thanks for the help!
On Wed, Nov 29, 2017 at 5:59 PM Tony Parker <anthony.parker@apple.com <mailto:anthony.parker@apple.com>> wrote:
I see a couple of places that are suspicious there:
Description:
https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L66
And the nameString / valueString constants in the copy query items function:
https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1057
https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1079
https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1104
https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1134
https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1158
Do you have the ability to re-build swift-corelibs-foundation and run a test? I suspect if you replace those with CFRetain(CFSTR(…)) then it will fix your crash.
- Tony
On Nov 29, 2017, at 2:06 PM, Brandon Williams <mbw234@gmail.com <mailto:mbw234@gmail.com>> wrote:
Thanks for the info!
FWIW, most of the places I have encountered this so far have made use of `URLComponents`, and have even been able to eliminate the crash by getting rid of that code in a few places. The other JIRA bug on this topic also mentions URLComponents in their repro case. Seems to be the culprit.
Also worth noting that in the above cases dealing with URLComponents the crash only happens in DEBUG compilations, not RELEASE.
However, I do have another one of these crashes that _does_ happen on RELEASE builds that I haven’t yet been able to reduce.
On Wed, Nov 29, 2017 at 4:43 PM Tony Parker <anthony.parker@apple.com <mailto:anthony.parker@apple.com>> wrote:
Hi Brandon,
This is probably a bug in the CoreFoundation C sources part of swift-corelibs-foundation. Unlike Darwin platforms, we can’t make the CFSTR(“”) macro produce a CFStringRef that cannot be overreleased. Probably there is a constant string returned from CF function, then the Swift runtime assumes it can release it, and bam we wind up with an overrelease.
We’ll have to track down which function is getting called, which probably just requires stepping through that test case with a debugger…
- Tony
On Nov 29, 2017, at 1:34 PM, Brandon Williams via swift-corelibs-dev <swift-corelibs-dev@swift.org <mailto:swift-corelibs-dev@swift.org>> wrote:
Hello all!
We’ve been encountering this runtime error quite a bit recently, and we have no idea why. We’ve filed a bug and there’s one other on JIRA related to this, but both without any comments:
[SR-6422] Encountering "Constant strings cannot be deallocated" in Linux foundation · Issue #3785 · apple/swift-corelibs-foundation · GitHub
[SR-6398] Constant strings cannot be deallocated: file Foundation/NSCFString.swift, line 118 · Issue #4053 · apple/swift-corelibs-foundation · GitHub
We’re curious if others are aware of this and or has more info? Is it a red herring for some other problem?
Any info would be helpful!
_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org <mailto:swift-corelibs-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev
_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org <mailto:swift-corelibs-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev