Changeset 225473 in webkit


Ignore:
Timestamp:
Dec 4, 2017 12:52:21 AM (6 years ago)
Author:
Carlos Garcia Campos
Message:

[GStreamer] More leaks in TextCombinerGStreamer
https://bugs.webkit.org/show_bug.cgi?id=180331

Reviewed by Michael Catanzaro.

I've noticed more leaks reading the code, but I couldn't check them with valgrind, because I don't know how to
trigger that code path. This patch cleans up the file using smart pointer everywhere.

  • platform/graphics/gstreamer/TextCombinerGStreamer.cpp:

(webkit_text_combiner_pad_init):
(webkitTextCombinerPadEvent):
(webkitTextCombinerReleasePad):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r225472 r225473  
     12017-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
    1162017-12-04  Jer Noble  <jer.noble@apple.com>
    217
  • trunk/Source/WebCore/platform/graphics/gstreamer/TextCombinerGStreamer.cpp

    r225459 r225473  
    9595static void webkit_text_combiner_pad_init(WebKitTextCombinerPad* pad)
    9696{
    97     pad->tags = 0;
    98 
    9997    gst_pad_set_event_function(GST_PAD(pad), webkitTextCombinerPadEvent);
    10098}
     
    138136        ASSERT(caps);
    139137
    140         GstPad* target = gst_ghost_pad_get_target(GST_GHOST_PAD(pad));
     138        GRefPtr<GstPad> target = adoptGRef(gst_ghost_pad_get_target(GST_GHOST_PAD(pad)));
    141139        ASSERT(target);
    142140
    143         GstElement* targetParent = gst_pad_get_parent_element(target);
     141        GRefPtr<GstElement> targetParent = adoptGRef(gst_pad_get_parent_element(target.get()));
    144142        ASSERT(targetParent);
    145143
    146         GstCaps* 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)) {
    148146            /* Caps are plain text, put a WebVTT encoder between the ghostpad and
    149147             * the funnel */
    150             if (targetParent == combiner->funnel) {
     148            if (targetParent.get() == combiner->funnel) {
    151149                /* Setup a WebVTT encoder */
    152150                GstElement* encoder = gst_element_factory_make("webvttenc", nullptr);
     
    160158
    161159                /* Switch the ghostpad to target the WebVTT encoder */
    162                 GstPad* sinkPad = gst_element_get_static_pad(encoder, "sink");
     160                GRefPtr<GstPad> sinkPad = adoptGRef(gst_element_get_static_pad(encoder, "sink"));
    163161                ASSERT(sinkPad);
    164162
    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);
    168165
    169166                /* Connect the WebVTT encoder to the funnel */
    170                 GstPad* srcPad = gst_element_get_static_pad(encoder, "src");
     167                GRefPtr<GstPad> srcPad = adoptGRef(gst_element_get_static_pad(encoder, "src"));
    171168                ASSERT(srcPad);
    172169
    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);
    176172            } /* else: pipeline is already correct */
    177173        } else {
    178174            /* Caps are not plain text, remove the WebVTT encoder */
    179             if (targetParent != combiner->funnel) {
     175            if (targetParent.get() != combiner->funnel) {
    180176                /* Get the funnel sink pad */
    181                 GstPad* srcPad = gst_element_get_static_pad(targetParent, "src");
     177                GRefPtr<GstPad> srcPad = adoptGRef(gst_element_get_static_pad(targetParent.get(), "src"));
    182178                ASSERT(srcPad);
    183179
    184                 GstPad* sinkPad = gst_pad_get_peer(srcPad);
     180                GRefPtr<GstPad> sinkPad = adoptGRef(gst_pad_get_peer(srcPad.get()));
    185181                ASSERT(sinkPad);
    186                 gst_object_unref(srcPad);
    187182
    188183                /* 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);
    192186
    193187                /* Remove the WebVTT encoder */
    194                 ret = gst_bin_remove(GST_BIN(combiner), targetParent);
     188                ret = gst_bin_remove(GST_BIN(combiner), targetParent.get());
    195189                ASSERT(ret);
    196190            } /* else: pipeline is already correct */
    197191        }
    198         gst_caps_unref(textCaps);
    199         gst_object_unref(targetParent);
    200         gst_object_unref(target);
    201192        break;
    202193    }
     
    255246{
    256247    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()));
    260250        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());
    264254    }
    265255
Note: See TracChangeset for help on using the changeset viewer.