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