Mercurial > pidgin
comparison libpurple/media.c @ 26100:23038e1a1754
Fix intermittent crash upon hangup when removing output windows.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Thu, 05 Feb 2009 11:47:36 +0000 |
parents | 218f052b9bf5 |
children | f06eb6e7d907 |
comparison
equal
deleted
inserted
replaced
26084:218f052b9bf5 | 26100:23038e1a1754 |
---|---|
2336 } | 2336 } |
2337 } | 2337 } |
2338 | 2338 |
2339 bin = gst_bin_new(NULL); | 2339 bin = gst_bin_new(NULL); |
2340 | 2340 |
2341 if (stream->sink != NULL) | |
2342 gst_bin_add(GST_BIN(GST_ELEMENT_PARENT( | |
2343 stream->sink)), bin); | |
2344 | |
2345 name = g_strdup_printf("stream-sink_%s_%s", | 2341 name = g_strdup_printf("stream-sink_%s_%s", |
2346 session_id, participant); | 2342 session_id, participant); |
2347 sink = gst_element_factory_make("autovideosink", name); | 2343 sink = gst_element_factory_make("autovideosink", name); |
2348 | 2344 |
2349 gst_bin_add(GST_BIN(bin), sink); | 2345 gst_bin_add(GST_BIN(bin), sink); |
2407 gst_object_unref(pad); | 2403 gst_object_unref(pad); |
2408 | 2404 |
2409 gst_element_release_request_pad(GST_ELEMENT_PARENT(peer), peer); | 2405 gst_element_release_request_pad(GST_ELEMENT_PARENT(peer), peer); |
2410 gst_object_unref(peer); | 2406 gst_object_unref(peer); |
2411 | 2407 |
2408 gst_element_set_locked_state(sink, TRUE); | |
2412 gst_element_set_state(sink, GST_STATE_NULL); | 2409 gst_element_set_state(sink, GST_STATE_NULL); |
2413 | 2410 |
2414 gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(sink)), sink); | 2411 gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(sink)), sink); |
2415 session->sink = NULL; | 2412 session->sink = NULL; |
2416 return TRUE; | 2413 return TRUE; |
2447 } | 2444 } |
2448 | 2445 |
2449 peer = gst_pad_get_peer(pad); | 2446 peer = gst_pad_get_peer(pad); |
2450 gst_object_unref(pad); | 2447 gst_object_unref(pad); |
2451 gst_pad_set_blocked_async(peer, TRUE, dummy_block_cb, NULL); | 2448 gst_pad_set_blocked_async(peer, TRUE, dummy_block_cb, NULL); |
2449 gst_element_set_locked_state(sink, TRUE); | |
2452 gst_element_set_state(sink, GST_STATE_NULL); | 2450 gst_element_set_state(sink, GST_STATE_NULL); |
2453 gst_bin_remove(GST_BIN(parent), sink); | 2451 gst_bin_remove(GST_BIN(parent), sink); |
2454 | 2452 |
2455 /* Add fakesink */ | 2453 /* Add fakesink */ |
2456 fakesink = gst_element_factory_make("fakesink", NULL); | 2454 fakesink = gst_element_factory_make("fakesink", NULL); |