Commit b331de5
committed
fix(stream): keep spa_hook in unmanaged memory across GC moves
pw_stream_add_listener stores the spa_hook pointer in the stream's
listener list. It was a managed instance field held only by a
GCHandleType.Normal (non-pinning) handle, so a GC heap compaction moved
the object and left PipeWire dereferencing a stale hook - a hard crash
in spa_list_remove when the stream next emitted an event (param_changed
on consumer link, and on teardown). Allocate the hook in unmanaged
memory so its address is stable for the stream's lifetime; free it after
the stream is destroyed.1 parent 416615e commit b331de5
1 file changed
Lines changed: 16 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
83 | 87 | | |
84 | 88 | | |
85 | 89 | | |
| |||
116 | 120 | | |
117 | 121 | | |
118 | 122 | | |
| 123 | + | |
119 | 124 | | |
120 | 125 | | |
121 | 126 | | |
| |||
137 | 142 | | |
138 | 143 | | |
139 | 144 | | |
| 145 | + | |
| 146 | + | |
140 | 147 | | |
141 | 148 | | |
142 | 149 | | |
143 | | - | |
144 | | - | |
145 | | - | |
| 150 | + | |
| 151 | + | |
146 | 152 | | |
147 | 153 | | |
148 | 154 | | |
| |||
206 | 212 | | |
207 | 213 | | |
208 | 214 | | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
209 | 221 | | |
210 | 222 | | |
211 | 223 | | |
| |||
0 commit comments