Repository navigation
Commit ffb2e8d
authored
Fix callback and promise teardown races (#59670)
Summary:
## Context
- Native callback and promise cleanup can race JavaScript VM teardown. Construction-thread identity is unsafe because execution can temporarily move to another thread.
## This diff
- Keep weak native handles to callback and promise values rooted by the runtime.
- Always defer implicit release; permit inline release only with explicit, current exclusive runtime access.
- Release teardown roots and one-shot synchronous callbacks before their runtime-access scope ends.
## Compatibility
- Native handle construction requires a dispatch context, and typed calls require that context to remain live. Teardown must clear rooted values before destroying the runtime.
This builds on the investigation and reproducer contributed by HyunWoo Lee in #59579.
## Changelog:
[General][Fixed] - Fix TurboModule callback and async promise cleanup racing runtime teardown
[General][Deprecated] - Deprecate the legacy callback wrapper in favour of weak lifetime handles
Co-authored-by: HyunWoo Lee <l2hyunwoo@gmail.com>
Differential Revision: D128581452
Pull Request resolved: #596701 parent 4ff1019 commit ffb2e8d
25 files changed
Lines changed: 1610 additions & 139 deletions
File tree
- packages/react-native
- ReactCommon
- callinvoker/ReactCommon/tests
- react
- bridging
- tests
- nativemodule
- core
- ReactCommon
- tests
- dom
- src/private/webapis/dom/nodes/__tests__
- scripts/cxx-api/api-snapshots
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
34 | 34 | | |
| 35 | + | |
| 36 | + | |
35 | 37 | | |
36 | 38 | | |
37 | 39 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
23 | 26 | | |
24 | 27 | | |
25 | 28 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
65 | | - | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
66 | 69 | | |
67 | 70 | | |
68 | 71 | | |
69 | | - | |
70 | 72 | | |
71 | | - | |
| 73 | + | |
72 | 74 | | |
73 | | - | |
| 75 | + | |
74 | 76 | | |
75 | 77 | | |
76 | 78 | | |
| |||
79 | 81 | | |
80 | 82 | | |
81 | 83 | | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
89 | 94 | | |
90 | 95 | | |
91 | 96 | | |
92 | | - | |
93 | 97 | | |
94 | | - | |
| 98 | + | |
95 | 99 | | |
96 | | - | |
| 100 | + | |
97 | 101 | | |
98 | 102 | | |
99 | 103 | | |
100 | 104 | | |
101 | 105 | | |
102 | | - | |
103 | | - | |
104 | | - | |
| 106 | + | |
105 | 107 | | |
106 | 108 | | |
107 | 109 | | |
108 | 110 | | |
109 | | - | |
| 111 | + | |
110 | 112 | | |
111 | 113 | | |
112 | 114 | | |
113 | | - | |
114 | | - | |
115 | 115 | | |
116 | 116 | | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
117 | 120 | | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
| 121 | + | |
122 | 122 | | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 123 | + | |
132 | 124 | | |
133 | 125 | | |
134 | 126 | | |
| |||
138 | 130 | | |
139 | 131 | | |
140 | 132 | | |
141 | | - | |
| 133 | + | |
| 134 | + | |
142 | 135 | | |
143 | | - | |
144 | | - | |
145 | | - | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
146 | 139 | | |
147 | 140 | | |
148 | 141 | | |
149 | 142 | | |
150 | 143 | | |
151 | 144 | | |
152 | 145 | | |
153 | | - | |
154 | | - | |
155 | | - | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
156 | 150 | | |
157 | 151 | | |
158 | 152 | | |
| |||
177 | 171 | | |
178 | 172 | | |
179 | 173 | | |
180 | | - | |
181 | | - | |
| 174 | + | |
| 175 | + | |
182 | 176 | | |
183 | 177 | | |
184 | 178 | | |
| |||
191 | 185 | | |
192 | 186 | | |
193 | 187 | | |
194 | | - | |
| 188 | + | |
195 | 189 | | |
196 | 190 | | |
197 | 191 | | |
| |||
205 | 199 | | |
206 | 200 | | |
207 | 201 | | |
208 | | - | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
209 | 206 | | |
210 | 207 | | |
211 | 208 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
| 10 | + | |
9 | 11 | | |
10 | 12 | | |
11 | 13 | | |
| |||
35 | 37 | | |
36 | 38 | | |
37 | 39 | | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
48 | 56 | | |
49 | 57 | | |
50 | 58 | | |
51 | 59 | | |
52 | | - | |
53 | | - | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
54 | 69 | | |
55 | 70 | | |
56 | 71 | | |
| |||
64 | 79 | | |
65 | 80 | | |
66 | 81 | | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
67 | 100 | | |
0 commit comments