<div dir="ltr">And the gst_bus_add_watch issue still occurs, I didn't fix that:<div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><div style><font color="#990000">(gst-switch-srv:31051): GStreamer-CRITICAL **: <b>gst_poll_get_read_gpollfd</b>: assertion `set != NULL' failed</font></div>
</div><div style><div style><font color="#990000">(gst-switch-srv:31051): GStreamer-CRITICAL **: <b>gst_bus_create_watch</b>: assertion `bus->priv->poll != NULL' failed</font></div></div><div style><div style><font color="#990000">(gst-switch-srv:31051): GLib-CRITICAL **: <b>g_source_set_callback</b>: assertion `source != NULL' failed</font></div>
</div></blockquote><div><br></div><div style>And the stack looks like:</div><div style><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><div style><font color="#666666">#0 <b>g_source_attach</b> (source=source@entry=0x0, context=0x0) at gmain.c:1154</font></div>
</div><div style><div style><font color="#666666">#1 0x00007ffff7b1e258 in <b>gst_bus_add_watch_full_unlocked</b> (notify=<optimized out>, user_data=0x706800, func=0x405b60 <gst_worker_message>, priority=<optimized out>, bus=<optimized out>) at gstbus.c:867</font></div>
</div><div style><div style><font color="#666666">#2 <b>gst_bus_add_watch_full_unlocked</b> (bus=<optimized out>, priority=<optimized out>, func=0x405b60 <gst_worker_message>, user_data=0x706800, notify=<optimized out>) at gstbus.c:846</font></div>
</div><div style><div style><font color="#666666">#3 0x00007ffff7b1e397 in <b>gst_bus_add_watch_full</b> (bus=0x227cb80, priority=priority@entry=0, func=func@entry=0x405b60 <gst_worker_message>, user_data=user_data@entry=0x706800, notify=notify@entry=0x0) at gstbus.c:916</font></div>
</div><div style><div style><font color="#666666">#4 0x00007ffff7b1e3c0 in <b>gst_bus_add_watch</b> (bus=<optimized out>, func=func@entry=0x405b60 <gst_worker_message>, user_data=user_data@entry=0x706800) at gstbus.c:948</font></div>
</div><div style><div style><font color="#666666">#5 0x0000000000405303 in <b>gst_worker_prepare_unsafe</b> (worker=worker@entry=0x706800) at gstworker.c:621</font></div></div><div style><div style><font color="#666666">#6 0x00000000004055a0 in <b>gst_worker_reset</b> (worker=0x706800) at gstworker.c:705</font></div>
</div><div style><div style><font color="#666666">#7 0x000000000040c138 in <b>gst_composite_apply_parameters</b> (composite=composite@entry=0x706800) at gstcomposite.c:320</font></div></div><div style><div style><font color="#666666">#8 0x000000000040c608 in <b>gst_composite_commit_transition</b> (composite=0x706800) at gstcomposite.c:497</font></div>
</div><div style><div style><font color="#666666">#9 <b>gst_composite_null</b> (composite=0x706800) at gstcomposite.c:583</font></div></div><div style><div style><font color="#666666">#10 0x0000000000406369 in <b>gst_worker_state_ready_to_null</b> (worker=0x706800) at gstworker.c:438</font></div>
</div><div style><div style><font color="#666666">#11 <b>gst_worker_pipeline_state_changed</b> (statechange=<optimized out>, worker=0x706800) at gstworker.c:472</font></div></div><div style><div style><font color="#666666">#12 <b>gst_worker_message</b> (bus=<optimized out>, message=0x2278530, worker=0x706800) at gstworker.c:542</font></div>
</div><div style><div style><font color="#666666">#13 0x00007ffff7b1dc67 in <b>gst_bus_source_dispatch</b> (source=source@entry=0x22575e0, callback=0x405b60 <gst_worker_message>, user_data=0x706800) at gstbus.c:773</font></div>
</div><div style><div style><font color="#666666">#14 0x00007ffff7252ee5 in <b>g_main_dispatch</b> (context=0x62a0f0) at gmain.c:3054</font></div></div><div style><div style><font color="#666666">#15 <b>g_main_context_dispatch</b> (context=context@entry=0x62a0f0) at gmain.c:3630</font></div>
</div><div style><div style><font color="#666666">#16 0x00007ffff7253228 in <b>g_main_context_iterate</b> (context=0x62a0f0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3701</font></div>
</div><div style><div style><font color="#666666">#17 0x00007ffff725369a in <b>g_main_loop_run</b> (loop=0x706760) at gmain.c:3895</font></div></div><div style><div style><font color="#666666">#18 0x00000000004044e0 in <b>gst_switch_server_run</b> (srv=0x708000) at gstswitchserver.c:1095</font></div>
</div><div style><div style><font color="#666666">#19 <b>main</b> (argc=1, argv=0x7fffffffe578) at gstswitchserver.c:1119</font></div></div></blockquote><div style><div><br></div></div><div class="gmail_extra"><div class="gmail_quote">
On Mon, Feb 4, 2013 at 10:18 AM, Duzy Chan <span dir="ltr"><<a href="mailto:geek@duzy.info" target="_blank">geek@duzy.info</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr">And things in <b>gst_multi_socket_sink_start_pre</b> are now attracting my attentions, because this is where <b>g_main_context_new</b> was called. And <b>GWakup</b> is like to be used only in <b>GMainContext</b>.<div>
<br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font color="#666666">static gboolean<br>gst_multi_socket_sink_start_pre (GstMultiHandleSink * mhsink)<br>{<br>
GstMultiSocketSink *mssink = GST_MULTI_SOCKET_SINK (mhsink);<br> GstMultiHandleSinkClass *mhsinkclass =<br> GST_MULTI_HANDLE_SINK_GET_CLASS (mhsink);<br> GList *clients;<br><br> GST_INFO_OBJECT (mssink, "starting");<br>
<br> mssink->main_context = <b>g_main_context_new</b> ();<br><br> CLIENTS_LOCK (mhsink);<br> for (clients = mhsink->clients; clients; clients = clients->next) {<br> GstSocketClient *client = clients->data;<br>
GstMultiHandleClient *mhclient = (GstMultiHandleClient *) client;<br><br> if (client->source)<br> continue;<br> mhsinkclass->hash_adding (mhsink, mhclient);<br> }<br> CLIENTS_UNLOCK (mhsink);<br><br>
return TRUE;<br>}</font><br></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><br></div></div></blockquote>And here is g_main_context_new looks like:</div>
<div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font color="#666666">GMainContext *</font></div><div><font color="#666666">g_main_context_new (void)</font></div>
<div><font color="#666666">{</font></div><div><font color="#666666"> static gsize initialised;</font></div><div><font color="#666666"> GMainContext *context;</font></div><div><font color="#666666"><br>
</font></div><div><font color="#666666"> if (g_once_init_enter (&initialised))</font></div><div><font color="#666666"> {</font></div><div><font color="#666666">#ifdef G_MAIN_POLL_DEBUG</font></div>
<div><font color="#666666"> if (getenv ("G_MAIN_POLL_DEBUG") != NULL)</font></div><div><font color="#666666"> _g_main_poll_debug = TRUE;</font></div><div><font color="#666666">#endif</font></div>
<div><font color="#666666"><br></font></div><div><font color="#666666"> g_once_init_leave (&initialised, TRUE);</font></div><div><font color="#666666"> }</font></div><div><font color="#666666"><br>
</font></div><div><font color="#666666"> context = g_new0 (GMainContext, 1);</font></div><div><font color="#666666"><br></font></div><div><font color="#666666"> g_mutex_init (&context->mutex);</font></div>
<div><font color="#666666"> g_cond_init (&context->cond);</font></div><div><font color="#666666"><br></font></div><div><font color="#666666"> context->owner = NULL;</font></div><div><font color="#666666"> context->waiters = NULL;</font></div>
<div><font color="#666666"><br></font></div><div><font color="#666666"> context->ref_count = 1;</font></div><div><font color="#666666"><br></font></div><div><font color="#666666"> context->next_id = 1;</font></div>
<div><font color="#666666"> </font></div><div><font color="#666666"> context->source_list = NULL;</font></div><div><font color="#666666"> </font></div><div><font color="#666666"> context->poll_func = g_poll;</font></div>
<div><font color="#666666"> </font></div><div><font color="#666666"> context->cached_poll_array = NULL;</font></div><div><font color="#666666"> context->cached_poll_array_size = 0;</font></div><div>
<font color="#666666"> </font></div><div><font color="#666666"> context->pending_dispatches = g_ptr_array_new ();</font></div><div><font color="#666666"> </font></div><div><font color="#666666"> context->time_is_fresh = FALSE;</font></div>
<div><font color="#666666"> </font></div><div><font color="#666666"> context->wakeup = <b>g_wakeup_new</b> ();</font></div><div><font color="#666666"> g_wakeup_get_pollfd (context->wakeup, &context->wake_up_rec);</font></div>
<div><font color="#666666"> g_main_context_add_poll_unlocked (context, 0, &context->wake_up_rec);</font></div><div><font color="#666666"><br></font></div><div><font color="#666666"> G_LOCK (main_context_list);</font></div>
<div><font color="#666666"> main_context_list = g_slist_append (main_context_list, context);</font></div><div><font color="#666666"><br></font></div><div><font color="#666666">#ifdef G_MAIN_POLL_DEBUG</font></div>
<div><font color="#666666"> if (_g_main_poll_debug)</font></div><div><font color="#666666"> g_print ("created context=%p\n", context);</font></div><div><font color="#666666">#endif</font></div>
<div><font color="#666666"><br></font></div><div><font color="#666666"> G_UNLOCK (main_context_list);</font></div><div><font color="#666666"><br></font></div><div><font color="#666666"> return context;</font></div>
<div><font color="#666666">}</font></div><div><br></div></div></blockquote><br></div></div><div class=""><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Feb 4, 2013 at 2:21 AM, Duzy Chan <span dir="ltr"><<a href="mailto:geek@duzy.info" target="_blank">geek@duzy.info</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div>Honestly I'm not very sure about the real cause. I think it might have failed to request some resources. I added many locks for many situation (my latest code is at <a href="https://github.com/duzy/gst-switch" target="_blank">https://github.com/duzy/gst-switch</a>), and changed a method of log messages, refactored my code a lot, and <span style="font-family:arial,sans-serif;font-size:13px"><b>gst_bus_create_watch</b> issue seems gone</span>. But I'm now confronting another issue, complaining:</div>
<div><br></div><div><div><font color="#666666">(gst-switch-srv:1709): GLib-ERROR **: <b>Creating pipes for GWakeup: Too many open files</b></font></div></div><div><br></div><div>This is happened almost 100% percent, by running the a test for nearly 2 minutes. And this test was trying to make request to <b>gst-switch-srv</b> indirectly to recreate the pipelines repeatedly and very fast (I spawned three threads in the test for making the requests to the server, and it will at least recreate three pipelines in a request).</div>
<div><br></div><div>Everything looks fine, except for the <b>too-many-open-files</b> error. And this time my stack looks like this (the latest changes):</div><div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div><div><font color="#666666"><b>bt</b></font></div><div><font color="#666666">#0 <b>g_logv</b> (log_domain=0x7ffff72d11ae "GLib", log_level=G_LOG_LEVEL_ERROR, format=<optimized out>, args=args@entry=0x7fffffffddb8) at /build/buildd/glib2.0-2.34.1/./glib/gmessages.c:974</font></div>
<div><font color="#666666">#1 0x00007ffff7297e42 in <b>g_log</b> (log_domain=log_domain@entry=0x7ffff72d11ae "GLib", log_level=log_level@entry=G_LOG_LEVEL_ERROR, format=format@entry=0x7ffff7323030 "Creating pipes for GWakeup: %s\n") at /build/buildd/glib2.0-2.34.1/./glib/gmessages.c:1003</font></div>
<div><font color="#666666">#2 0x00007ffff72cd113 in <b>g_wakeup_new</b> () at /build/buildd/glib2.0-2.34.1/./glib/gwakeup.c:163</font></div><div><font color="#666666">#3 0x00007ffff728ed47 in <b>g_main_context_new</b> () at /build/buildd/glib2.0-2.34.1/./glib/gmain.c:590</font></div>
<div><font color="#666666">#4 0x00007fffd1cb1071 in <b>gst_multi_socket_sink_start_pre</b> (mhsink=0x23564d0) at gstmultisocketsink.c:1005</font></div><div><font color="#666666">#5 0x00007fffd1cacc50 in <b>gst_multi_handle_sink_start</b> (bsink=0x23564d0) at gstmultihandlesink.c:2112</font></div>
<div><font color="#666666">#6 <b>gst_multi_handle_sink_change_state</b> (element=0x23564d0, transition=<optimized out>) at gstmultihandlesink.c:2205</font></div><div><font color="#666666">#7 0x00007ffff7b2e28c in <b>gst_element_change_state</b> (element=element@entry=0x23564d0, transition=<optimized out>) at gstelement.c:2594</font></div>
<div><font color="#666666">#8 0x00007ffff7b2ec61 in <b>gst_element_set_state_func</b> (element=0x23564d0, state=GST_STATE_READY) at gstelement.c:2550</font></div><div><font color="#666666">#9 0x00007ffff7b16579 in <b>gst_bin_element_set_state</b> (next=GST_STATE_READY, current=GST_STATE_NULL, start_time=0, base_time=0, element=0x23564d0, bin=0x217f1b0) at gstbin.c:2308</font></div>
<div><font color="#666666">#10 <b>gst_bin_change_state_func</b> (element=0x217f1b0, transition=GST_STATE_CHANGE_NULL_TO_READY) at gstbin.c:2610</font></div><div><font color="#666666">#11 0x00007ffff7b2e28c in <b>gst_element_change_state</b> (element=element@entry=0x217f1b0, transition=<optimized out>) at gstelement.c:2594</font></div>
<div><font color="#666666">#12 0x00007ffff7b2ec61 in <b>gst_element_set_state_func</b> (element=0x217f1b0, state=GST_STATE_READY) at gstelement.c:2550</font></div><div><font color="#666666">#13 0x0000000000405961 in <b>gst_worker_start</b> (worker=0x62f0f0) at gstworker.c:236</font></div>
<div><font color="#666666">#14 0x000000000040bc30 in <b>gst_composite_close_transition</b> (composite=0x706800) at gstcomposite.c:513</font></div><div><font color="#666666">#15 <b>gst_composite_alive</b> (composite=0x706800) at gstcomposite.c:565</font></div>
<div><font color="#666666">#16 0x00000000004063ca in <b>gst_worker_state_paused_to_playing</b> (worker=0x706800) at gstworker.c:412</font></div><div><font color="#666666">#17 <b>gst_worker_pipeline_state_changed</b> (statechange=<optimized out>, worker=0x706800) at gstworker.c:463</font></div>
<div><font color="#666666">#18 <b>gst_worker_message</b> (bus=<optimized out>, message=0x7fffd80138a0, worker=0x706800) at gstworker.c:542</font></div><div><font color="#666666">#19 0x00007ffff7b1dc67 in <b>gst_bus_source_dispatch</b> (source=source@entry=0x23614f0, callback=0x405b40 <gst_worker_message>, user_data=0x706800) at gstbus.c:773</font></div>
<div><font color="#666666">#20 0x00007ffff7290ab5 in <b>g_main_dispatch</b> (context=0x61f2d0) at /build/buildd/glib2.0-2.34.1/./glib/gmain.c:2715</font></div><div><font color="#666666">#21 <b>g_main_context_dispatch</b> (context=context@entry=0x61f2d0) at /build/buildd/glib2.0-2.34.1/./glib/gmain.c:3219</font></div>
<div><font color="#666666">#22 0x00007ffff7290de8 in <b>g_main_context_iterate</b> (context=0x61f2d0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /build/buildd/glib2.0-2.34.1/./glib/gmain.c:3290</font></div>
<div><font color="#666666">#23 0x00007ffff72911e2 in <b>g_main_loop_run</b> (loop=0x706760) at /build/buildd/glib2.0-2.34.1/./glib/gmain.c:3484</font></div><div><font color="#666666">#24 0x00000000004044c0 in <b>gst_switch_server_run</b> (srv=0x708000) at gstswitchserver.c:1095</font></div>
<div><font color="#666666">#25 <b>main</b> (argc=1, argv=0x7fffffffe578) at gstswitchserver.c:1119</font></div><div><br></div></div></blockquote></div><div>The top several call frames are almost 100% percent path. And the key location of my client code is at:</div>
<div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><a href="https://github.com/duzy/gst-switch/blob/switch/tools/gstworker.c#L681" target="_blank">https://github.com/duzy/gst-switch/blob/switch/tools/gstworker.c#L681</a><br>
</div><div><br></div></div></blockquote>Which is doing recreation of three pipelines. I've been tracking on it for some days, but not yet have found the exact cause point. But I'm very sure that those leaked file descriptors are all of "unix socket" class, and should be created by <b>g_unix_open_pipe</b>. E.g. those already opened files (part, total 1024):<div>
<br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>....</div><div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 750 -> socket:[2418126]</div><div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 751 -> socket:[2418138]</div>
<div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 752 -> socket:[2418139]</div><div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 753 -> socket:[2418140]</div><div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 754 -> socket:[2417418]</div>
<div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 755 -> socket:[2417357]</div><div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 756 -> socket:[2417358]</div><div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 757 -> socket:[2415573]</div>
<div> lrwx------ 1 duzy duzy 64 Feb 4 01:46 758 -> socket:[2415574]</div><div>....</div><div><br></div></div></blockquote>I'm now think that if my previous issue was actually not solved, and that's actually very much related to too-many-open-files issue. Say:</div>
<div><br></div><div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div style="font-family:arial,sans-serif;font-size:13px">GStreamer-CRITICAL **: gst_poll_get_read_gpollfd: assertion `set != NULL' failed</div>
<div style="font-family:arial,sans-serif;font-size:13px">GStreamer-CRITICAL **: gst_bus_create_watch: assertion `bus->priv->poll != NULL' failed<br></div><div style="font-family:arial,sans-serif;font-size:13px">
GLib-CRITICAL **: g_source_set_callback: assertion `source != NULL' failed</div></div></blockquote><div><br></div></div><div>Hope you would have some ideas.</div><div><br></div><div>Best Regards</div><span><font color="#888888">
<div>Duzy Chan</div><div><br></div></font></span></div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Jan 26, 2013 at 7:50 PM, Tim-Philipp Müller <span dir="ltr"><<a href="mailto:t.i.m@zen.co.uk" target="_blank">t.i.m@zen.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">On Sat, 2013-01-26 at 08:08 +0800, Duzy Chan wrote:<br>
<br>
> Problem solved. Thanks all.<br>
<br>
So what was the problem/solution? Something in your code?<br>
<br>
Cheers<br>
-Tim<br>
<br>
<br>
<br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>