Mercurial > pidgin
comparison libpurple/mediamanager.c @ 27856:1c58b9d2429b
Unleak pad if more pads are linked.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Fri, 07 Aug 2009 09:25:33 +0000 |
parents | c8ff0a9cf8cc |
children | d865064a3104 |
comparison
equal
deleted
inserted
replaced
27855:5058cdd46464 | 27856:1c58b9d2429b |
---|---|
397 request_pad_unlinked_cb(GstPad *pad, GstPad *peer, gpointer user_data) | 397 request_pad_unlinked_cb(GstPad *pad, GstPad *peer, gpointer user_data) |
398 { | 398 { |
399 GstElement *parent = GST_ELEMENT_PARENT(pad); | 399 GstElement *parent = GST_ELEMENT_PARENT(pad); |
400 GstIterator *iter; | 400 GstIterator *iter; |
401 GstPad *remaining_pad; | 401 GstPad *remaining_pad; |
402 GstIteratorResult result; | |
402 | 403 |
403 gst_element_release_request_pad(GST_ELEMENT_PARENT(pad), pad); | 404 gst_element_release_request_pad(GST_ELEMENT_PARENT(pad), pad); |
404 iter = gst_element_iterate_pads(parent); | 405 iter = gst_element_iterate_src_pads(parent); |
405 | 406 |
406 if (gst_iterator_next(iter, (gpointer)&remaining_pad) | 407 result = gst_iterator_next(iter, (gpointer)&remaining_pad); |
407 == GST_ITERATOR_DONE) { | 408 |
409 if (result == GST_ITERATOR_DONE) { | |
408 gst_element_set_locked_state(parent, TRUE); | 410 gst_element_set_locked_state(parent, TRUE); |
409 gst_element_set_state(parent, GST_STATE_NULL); | 411 gst_element_set_state(parent, GST_STATE_NULL); |
410 gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(parent)), parent); | 412 gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(parent)), parent); |
413 } else if (result == GST_ITERATOR_OK) { | |
414 gst_object_unref(remaining_pad); | |
411 } | 415 } |
412 | 416 |
413 gst_iterator_free(iter); | 417 gst_iterator_free(iter); |
414 } | 418 } |
415 #endif | 419 #endif |