[gst-devel] realvideodec element blocked when close_library (in transition of NULL to READY), why?

wuzw wuzw at magima.com.cn
Fri Nov 20 04:09:47 CET 2009


----- Original Message ----- 
From: "Lukas Ruetz" <lukas.ruetz at gmx.at>
To: "Discussion of the development of GStreamer" <gstreamer-devel at lists.sourceforge.net>
Sent: Thursday, November 19, 2009 6:56 PM
Subject: Re: [gst-devel] realvideodec element blocked when close_library (in transition of NULL to READY), why?


> Hi,
> 
> Am Donnerstag, den 19.11.2009, 17:44 +0800 schrieb wuzw:
> > hi all:
> >     I wrote my gst app which used realvideodec element like
> > this( ignored some non-significant code):
> >  
> > main()
> > {
> >     ........
> >     pthread_creat(&my_thread, null, create_pipe_func, null);
> >  
> >     while(1)
> >     {
> >         c = getchar();
> >  
> >         if(c = 'b')
> >         {
> >             sleep(10);
> >         }
> >     }
> >     
> > }
> >  
> > create_pipe_func()
> > {
> >      loop = g_main_loop_new(null, false);
> >      pipeline = _create_pipeline();//make all element and link them,
> > set pad-added callback for delayed link to realvideodec sink pad
> >      gst_element_set_state(pipeline, GST_STATE_PLAYING);
> >  
> >      g_mainn_loop_run(loop);
> > }
> >  
> > my pipeline is like this:
> > filesrc --> rmdemux --> realvideodec --> fakesink
> >  
> > my problem is:
> >  
> > I use the app to play rv4 file, and stream thread blocked on
> > close_library().
> > gst log like this(sorry, I can not copy and paste for some reason, so
> > i type some significant logs):
> > ------------------------------------------------------------------------------------------------
> > gstelement.c:2496:gst_element_set_state_func:<realvideodec0> final:
> > set state from NULL to READY
> > gstrealvideodec.c:456:open_library:<realvideodec0> Attempting to open
> > shared library for real video version 2
> > ....
> > gstrealvideodec.c:557:close_library:<realvideodec0> closing library
> > module
> > gstrealvideodec.c:456:open_library:<realvideodec0> Attempting to open
> > shared library for real video version 3
> > ....
> > gstrealvideodec.c:557:close_library:<realvideodec0> closing library
> > module
> > ------------------------------------------------------------------------------------------------
> >  
> > no more things logged. I added some print to glib source code and
> > found that dlclose() blocked.
> >  
> > if  i input 'b' now , stream tread unblocked and went on correctly.
> >  
> >  
> >  
> >  
> > If my code like :
> > main()
> > {
> >     ........
> >     create_pipe_func();
> >  
> >         
> > }
> >  
> > create_pipe_func()
> > {
> >      loop = g_main_loop_new(null, false);
> >      pipeline = _create_pipeline();//make all element and link them,
> > set pad-added callback for delayed link to realvideodec sink pad
> >      gst_element_set_state(pipeline, GST_STATE_PLAYING);
> >  
> >      g_mainn_loop_run(loop);
> > }
> >  
> > every thing is ok. 
> > why? 
> >  
> 
> Have you initialized glib-threading?
> 
> main () {
>   ...
>   g_thread_init( NULL );
>   gst_init( &argc, &argv );
>   ...
> }
> 
> Maybe it's safer to use the glib threading functions - at least it works
> for me.
> 
> lukas
> 
> 
> 
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
> trial. Simplify your report design, integration and deployment - and focus on 
> what you do best, core application coding. Discover what's new with
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
> 


new code like this:
 main () {
   ...
   g_thread_init( NULL );
   gst_init( &argc, &argv );
   g_thread = g_tread_create(create_pipeline_func, null, true, &error);
   ...
 }


% export GST_DEBUG_LEVEL=4
% ./tmp.x
log : 
GST_PLUGIN_LOADING gstpluginfeature.c:105:gst_plugin_feature_load : loading plugin for feature 0x80ca090; 'pipelinet'
*** glic-detected***  tmp.x : double free or corruption (out): 0x08161958 ***


% export GST_DEBUG_LEVEL=5
% ./tmp.x
log (the same as previously happened):
gstelement.c:2496:gst_element_set_state_func:<realvideodec0> final:
 set state from NULL to READY
 gstrealvideodec.c:456:open_library:<realvideodec0> Attempting to open
shared library for real video version 2
 ....
 gstrealvideodec.c:557:close_library:<realvideodec0> closing library
 module
 gstrealvideodec.c:456:open_library:<realvideodec0> Attempting to open
 shared library for real video version 3
 ....
 gstrealvideodec.c:557:close_library:<realvideodec0> closing library
 module
 ------------------------------------------------------------------------------------------------
 no more things logged. I added some print to glib source code and
 found that dlclose() blocked.








More information about the gstreamer-devel mailing list