Skip to content

Commit ae51bb6

Browse files
committed
---
yaml --- r: 345530 b: refs/heads/master c: dd7190c h: refs/heads/master
1 parent ac1b7ab commit ae51bb6

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 08fcca31e82895c983ee4898472c811f12b42a4a
2+
refs/heads/master: dd7190c0404c50839133e565f8fb128388e29366
33
refs/heads/master-next: 203b3026584ecad859eb328b2e12490099409cd5
44
refs/tags/osx-passed: b6b74147ef8a386f532cf9357a1bde006e552c54
55
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-a: 6bb18e013c2284f2b45f5f84f2df2887dc0f7dea

trunk/stdlib/public/runtime/ReflectionMirror.mm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ static bool loadSpecialReferenceStorage(OpaqueValue *fieldData,
172172
reinterpret_cast<OpaqueValue *>(temporaryValue));
173173

174174
type->deallocateBufferIn(&temporaryBuffer);
175+
swift_unknownObjectRelease(strongValue);
175176

176177
return true;
177178
}

trunk/test/stdlib/WeakMirror.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,24 @@ mirrors.test("struct/StructHasNativeWeakReference") {
9999
print(extractedChild)
100100
}
101101

102+
// SR-8878: Using Mirror to access a weak reference results in object
103+
// being retained indefinitely
104+
mirrors.test("class/NativeSwiftClassHasNativeWeakReferenceNoLeak") {
105+
weak var verifier: AnyObject?
106+
do {
107+
let parent = NativeSwiftClassHasWeak(x: 1010)
108+
let child = NativeSwiftClass(x: 2020)
109+
verifier = child
110+
parent.weakProperty = child
111+
let mirror = Mirror(reflecting: parent)
112+
let children = Array(mirror.children)
113+
let extractedChild = children[0].1 as! NativeSwiftClass
114+
expectNotNil(extractedChild)
115+
expectNotNil(verifier)
116+
}
117+
expectNil(verifier)
118+
}
119+
102120
#if _runtime(_ObjC)
103121

104122
import Foundation

0 commit comments

Comments
 (0)