Skip to content

Commit 970100e

Browse files
committed
LibMedia: Pass SeekData by reference to avoid an inexplicable leak
For some reason, it seems that passing NonnullRefPtr<SeekData> const& was causing us to triple ref() in the capture group for the audio seek handlers, followed by only a single unref(). Changing this to plain old SeekData& inexplicably fixes the leak.
1 parent e935dfb commit 970100e

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

Libraries/LibMedia/PlaybackStates/SeekingStateHandler.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,21 @@ class SeekingStateHandler final : public ResumingStateHandler {
103103
return count;
104104
}
105105

106-
static void begin_audio_seeks(NonnullRefPtr<SeekData> const& seek_data)
106+
static void begin_audio_seeks(SeekData& seek_data)
107107
{
108-
seek_data->audio_seeks_in_flight = count_audio_tracks(seek_data->manager);
108+
seek_data.audio_seeks_in_flight = count_audio_tracks(seek_data.manager);
109109

110-
if (seek_data->audio_seeks_in_flight == 0) {
111-
possibly_complete_seek(*seek_data);
110+
if (seek_data.audio_seeks_in_flight == 0) {
111+
possibly_complete_seek(seek_data);
112112
return;
113113
}
114114

115-
for (auto const& audio_track_data : seek_data->manager->m_audio_track_datas) {
116-
if (seek_data->manager->m_audio_sink->provider(audio_track_data.track) == nullptr)
115+
for (auto const& audio_track_data : seek_data.manager->m_audio_track_datas) {
116+
if (seek_data.manager->m_audio_sink->provider(audio_track_data.track) == nullptr)
117117
continue;
118-
audio_track_data.provider->seek(seek_data->chosen_timestamp, [seek_data]() {
118+
audio_track_data.provider->seek(seek_data.chosen_timestamp, [seek_data = NonnullRefPtr(seek_data)]() {
119119
seek_data->audio_seeks_completed++;
120-
possibly_complete_seek(*seek_data);
120+
possibly_complete_seek(seek_data);
121121
});
122122
}
123123
}
@@ -151,7 +151,7 @@ class SeekingStateHandler final : public ResumingStateHandler {
151151
seek_data->video_seeks_completed++;
152152

153153
if (seek_mode == SeekMode::Accurate)
154-
possibly_complete_seek(*seek_data);
154+
possibly_complete_seek(seek_data);
155155
else if (seek_data->video_seeks_completed == seek_data->video_seeks_in_flight)
156156
begin_audio_seeks(seek_data);
157157
});

0 commit comments

Comments
 (0)