Changeset 225473 in webkit
- Timestamp:
- Dec 4, 2017 12:52:21 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r225472 r225473 1 2017-12-04 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GStreamer] More leaks in TextCombinerGStreamer 4 https://bugs.webkit.org/show_bug.cgi?id=180331 5 6 Reviewed by Michael Catanzaro. 7 8 I've noticed more leaks reading the code, but I couldn't check them with valgrind, because I don't know how to 9 trigger that code path. This patch cleans up the file using smart pointer everywhere. 10 11 * platform/graphics/gstreamer/TextCombinerGStreamer.cpp: 12 (webkit_text_combiner_pad_init): 13 (webkitTextCombinerPadEvent): 14 (webkitTextCombinerReleasePad): 15 1 16 2017-12-04 Jer Noble <jer.noble@apple.com> 2 17 -
trunk/Source/WebCore/platform/graphics/gstreamer/TextCombinerGStreamer.cpp
r225459 r225473 95 95 static void webkit_text_combiner_pad_init(WebKitTextCombinerPad* pad) 96 96 { 97 pad->tags = 0;98 99 97 gst_pad_set_event_function(GST_PAD(pad), webkitTextCombinerPadEvent); 100 98 } … … 138 136 ASSERT(caps); 139 137 140 G stPad* target = gst_ghost_pad_get_target(GST_GHOST_PAD(pad));138 GRefPtr<GstPad> target = adoptGRef(gst_ghost_pad_get_target(GST_GHOST_PAD(pad))); 141 139 ASSERT(target); 142 140 143 G stElement* targetParent = gst_pad_get_parent_element(target);141 GRefPtr<GstElement> targetParent = adoptGRef(gst_pad_get_parent_element(target.get())); 144 142 ASSERT(targetParent); 145 143 146 G stCaps* textCaps = gst_caps_new_empty_simple("text/x-raw");147 if (gst_caps_can_intersect(textCaps , caps)) {144 GRefPtr<GstCaps> textCaps = adoptGRef(gst_caps_new_empty_simple("text/x-raw")); 145 if (gst_caps_can_intersect(textCaps.get(), caps)) { 148 146 /* Caps are plain text, put a WebVTT encoder between the ghostpad and 149 147 * the funnel */ 150 if (targetParent == combiner->funnel) {148 if (targetParent.get() == combiner->funnel) { 151 149 /* Setup a WebVTT encoder */ 152 150 GstElement* encoder = gst_element_factory_make("webvttenc", nullptr); … … 160 158 161 159 /* Switch the ghostpad to target the WebVTT encoder */ 162 G stPad* sinkPad = gst_element_get_static_pad(encoder, "sink");160 GRefPtr<GstPad> sinkPad = adoptGRef(gst_element_get_static_pad(encoder, "sink")); 163 161 ASSERT(sinkPad); 164 162 165 ret = gst_ghost_pad_set_target(GST_GHOST_PAD(pad), sinkPad); 166 ASSERT(ret); 167 gst_object_unref(sinkPad); 163 ret = gst_ghost_pad_set_target(GST_GHOST_PAD(pad), sinkPad.get()); 164 ASSERT(ret); 168 165 169 166 /* Connect the WebVTT encoder to the funnel */ 170 G stPad* srcPad = gst_element_get_static_pad(encoder, "src");167 GRefPtr<GstPad> srcPad = adoptGRef(gst_element_get_static_pad(encoder, "src")); 171 168 ASSERT(srcPad); 172 169 173 ret = GST_PAD_LINK_SUCCESSFUL(gst_pad_link(srcPad, target)); 174 ASSERT(ret); 175 gst_object_unref(srcPad); 170 ret = GST_PAD_LINK_SUCCESSFUL(gst_pad_link(srcPad.get(), target.get())); 171 ASSERT(ret); 176 172 } /* else: pipeline is already correct */ 177 173 } else { 178 174 /* Caps are not plain text, remove the WebVTT encoder */ 179 if (targetParent != combiner->funnel) {175 if (targetParent.get() != combiner->funnel) { 180 176 /* Get the funnel sink pad */ 181 G stPad* srcPad = gst_element_get_static_pad(targetParent, "src");177 GRefPtr<GstPad> srcPad = adoptGRef(gst_element_get_static_pad(targetParent.get(), "src")); 182 178 ASSERT(srcPad); 183 179 184 G stPad* sinkPad = gst_pad_get_peer(srcPad);180 GRefPtr<GstPad> sinkPad = adoptGRef(gst_pad_get_peer(srcPad.get())); 185 181 ASSERT(sinkPad); 186 gst_object_unref(srcPad);187 182 188 183 /* Switch the ghostpad to target the funnel */ 189 ret = gst_ghost_pad_set_target(GST_GHOST_PAD(pad), sinkPad); 190 ASSERT(ret); 191 gst_object_unref(sinkPad); 184 ret = gst_ghost_pad_set_target(GST_GHOST_PAD(pad), sinkPad.get()); 185 ASSERT(ret); 192 186 193 187 /* Remove the WebVTT encoder */ 194 ret = gst_bin_remove(GST_BIN(combiner), targetParent );188 ret = gst_bin_remove(GST_BIN(combiner), targetParent.get()); 195 189 ASSERT(ret); 196 190 } /* else: pipeline is already correct */ 197 191 } 198 gst_caps_unref(textCaps);199 gst_object_unref(targetParent);200 gst_object_unref(target);201 192 break; 202 193 } … … 255 246 { 256 247 WebKitTextCombiner* combiner = WEBKIT_TEXT_COMBINER(element); 257 GstPad* peer = gst_pad_get_peer(pad); 258 if (peer) { 259 GstElement* parent = gst_pad_get_parent_element(peer); 248 if (GRefPtr<GstPad> peer = adoptGRef(gst_pad_get_peer(pad))) { 249 GRefPtr<GstElement> parent = adoptGRef(gst_pad_get_parent_element(peer.get())); 260 250 ASSERT(parent); 261 gst_element_release_request_pad(parent , peer);262 if (parent != combiner->funnel)263 gst_bin_remove(GST_BIN(combiner), parent );251 gst_element_release_request_pad(parent.get(), peer.get()); 252 if (parent.get() != combiner->funnel) 253 gst_bin_remove(GST_BIN(combiner), parent.get()); 264 254 } 265 255
Note: See TracChangeset
for help on using the changeset viewer.