<div dir="ltr">There're many file descriptor leas in GstBus. All AF_UNIX socket fds, should be used as message pipe:<div><br></div><div><div>==5605== Open AF_UNIX socket 834: <unknown></div><div>==5605==    at 0x5D13F8A: socketpair (syscall-template.S:82)</div>

<div>==5605==    by 0x4EA2227: gst_poll_new (gstpoll.c:569)</div><div>==5605==    by 0x4EA22FD: gst_poll_new_timer (gstpoll.c:630)</div><div>==5605==    by 0x4E6AA84: gst_bus_constructed (gstbus.c:152)</div><div>==5605==    by 0x54A1122: g_object_newv (gobject.c:1747)</div>

<div>==5605==    by 0x4E6B105: gst_bus_new (gstbus.c:286)</div><div>==5605==    by 0x4E9B6A5: gst_pipeline_init (gstpipeline.c:210)</div><div>==5605==    by 0x54BBDDE: g_type_create_instance (gtype.c:1912)</div><div>==5605==    by 0x549F6B7: g_object_constructor (gobject.c:1855)</div>

<div>==5605==    by 0x54A0CB0: g_object_newv (gobject.c:1719)</div><div>==5605==    by 0x4E7D44D: gst_element_factory_create (gstelementfactory.c:377)</div><div>==5605==    by 0x4E7D60E: gst_element_factory_make (gstelementfactory.c:446)</div>

<div>==5605==    by 0x4EDF184: priv_gst_parse_launch (grammar.y:965)</div><div>==5605==    by 0x4ED639C: gst_parse_launch_full (gstparse.c:324)</div><div>==5605==    by 0x405714: gst_worker_create_pipeline (gstworker.c:181)</div>

<div>==5605==    by 0x4052B4: gst_worker_prepare_unsafe (gstworker.c:611)</div><div>==5605==    by 0x40560F: gst_worker_reset (gstworker.c:708)</div><div>==5605==    by 0x40C847: gst_composite_apply_parameters (gstcomposite.c:320)</div>

<div>==5605==    by 0x40CD17: gst_composite_null (gstcomposite.c:540)</div><div>==5605==    by 0x4063D8: gst_worker_message (gstworker.c:438)</div></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Mon, Feb 4, 2013 at 7:38 PM, 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">Well I tried to manually close the socket FD by <b>client-socket-removed</b> signal, but it looks like the signal was never emitted (hoping can some one confirm this for me, as I gone through <i>gstmultisocketsink.c</i> and <i>gsttcpserversink.c</i>) because it looks like <b>client_free</b> was not called, sincerely hoping someone could tell me a bit about this for help:<div>


<br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font color="#666666">static void <b>gst_multi_socket_sink_client_free</b> (GstMultiHandleSink * mhsink,</font></div></div>
<div><div><font color="#666666">    GstMultiHandleClient * client)</font></div></div></blockquote><div><br></div><div>And the other ref is <b>gst_multi_handle_sink_remove_client_link</b> in <b>gstmultihandlesink.c</b>, which do a invocation of <b>client_free</b>.</div>


<div><br></div><div>And I'm using gst-plugins-base, at point d094ac49cce746425c83f7771a93cc1466a4a6ae.</div><div><br></div><div>Regards</div><span class="HOEnZb"><font color="#888888"><div>Duzy Chan</div><div><br></div>

<div><br></div>
<div><br></div></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Feb 4, 2013 at 5:37 PM, 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I think what I was thinking is right, the tcpserversink is not closing the FDs it allocated, I need to free those socket FD by myself, according to the comment docs in gstmultihandlesink.c:<div>


<br></div><div>
<blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font color="#666666"> * Clients can be removed from multihandlesink by emitting the #GstMultiHandleSink::remove signal. For</font></div>
<div><font color="#666666"> * each descriptor removed, the #GstMultiHandleSink::client-removed signal will be called. The</font></div><div><font color="#666666"> * #GstMultiHandleSink::client-removed signal can also be fired when multihandlesink decides that a</font></div>



<div><font color="#666666"> * client is not active anymore or, depending on the value of the</font></div><div><font color="#666666"> * #GstMultiHandleSink:recover-policy property, if the client is reading too slowly.</font></div>



<div><font color="#666666"> * In all cases, multihandlesink will never close a file descriptor itself.</font></div><div><font color="#666666"> * The user of multihandlesink is responsible for closing all file descriptors.</font></div>



<div><font color="#666666"> * This can for example be done in response to the #GstMultiHandleSink::client-fd-removed signal.</font></div><div><font color="#666666"> * Note that multihandlesink still has a reference to the file descriptor when the</font></div>



<div><font color="#666666"> * #GstMultiHandleSink::client-removed signal is emitted, so that "get-stats" can be performed on</font></div><div><font color="#666666"> * the descriptor; it is therefore not safe to close the file descriptor in</font></div>



<div><font color="#666666"> * the #GstMultiHandleSink::client-removed signal handler, and you should use the </font></div><div><font color="#666666"> * #GstMultiHandleSink::client-fd-removed signal to safely close the fd.</font></div>



<div><br></div></div></blockquote>I'm going to try to close the FD by myself, and see if it fixes my issue.</div><div><br></div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Mon, Feb 4, 2013 at 5:25 PM, 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">And I'm thinking that do I need to manually close the socket fd created by a tcpserversink? It looks like it's not always closed on changing the element state from ready to null.<div>



<br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div><div><font color="#666666">static gboolean</font></div><div><font color="#666666">gst_multi_handle_sink_stop (GstBaseSink * bsink)</font></div><div><font color="#666666">{</font></div><div><font color="#666666">  GstMultiHandleSinkClass *mhclass;</font></div>




<div><font color="#666666">  GstBuffer *buf;</font></div><div><font color="#666666">  gint i;</font></div><div><font color="#666666">  GstMultiHandleSink *mhsink = GST_MULTI_HANDLE_SINK (bsink);</font></div><div><font color="#666666"><br>




</font></div><div><font color="#666666">  mhclass = GST_MULTI_HANDLE_SINK_GET_CLASS (mhsink);</font></div><div><font color="#666666"><br></font></div><div><font color="#666666">  if (!GST_OBJECT_FLAG_IS_SET (bsink, GST_MULTI_HANDLE_SINK_OPEN))</font></div>




<div><font color="#666666">    return TRUE;</font></div><div><font color="#666666"><br></font></div><div><font color="#666666">  mhsink->running = FALSE;</font></div><div><font color="#666666"><br></font></div><div><font color="#666666">  mhclass->stop_pre (mhsink);</font></div>




<div><font color="#666666"><br></font></div><div><font color="#666666">  if (mhsink->thread) {</font></div><div><font color="#666666">    GST_DEBUG_OBJECT (mhsink, "joining thread");</font></div><div><font color="#666666">    g_thread_join (mhsink->thread);</font></div>




<div><font color="#666666">    GST_DEBUG_OBJECT (mhsink, "joined thread");</font></div><div><font color="#666666">    mhsink->thread = NULL;</font></div><div><font color="#666666">  }</font></div><div><font color="#666666"><br>




</font></div><div><font color="#666666">  /* free the clients */</font></div><div><font color="#666666">  mhclass->clear (GST_MULTI_HANDLE_SINK (mhsink));</font></div><div><font color="#666666"><br></font></div><div><font color="#666666">  if (mhsink->streamheader) {</font></div>




<div><font color="#666666">    g_slist_foreach (mhsink->streamheader, (GFunc) gst_mini_object_unref, NULL);</font></div><div><font color="#666666">    g_slist_free (mhsink->streamheader);</font></div><div><font color="#666666">    mhsink->streamheader = NULL;</font></div>




<div><font color="#666666">  }</font></div><div><font color="#666666"><br></font></div><div><font color="#444444">  if (mhclass-><b>close</b>)</font></div><div><font color="#444444">    mhclass-><b>close</b> (mhsink);</font></div>




<div><font color="#666666"><br></font></div><div><font color="#666666">  mhclass->stop_post (mhsink);</font></div><div><font color="#666666"><br></font></div><div><font color="#666666">  /* remove all queued buffers */</font></div>




<div><font color="#666666">  if (mhsink->bufqueue) {</font></div><div><font color="#666666">    GST_DEBUG_OBJECT (mhsink, "Emptying bufqueue with %d buffers",</font></div><div><font color="#666666">        mhsink->bufqueue->len);</font></div>




<div><font color="#666666">    for (i = mhsink->bufqueue->len - 1; i >= 0; --i) {</font></div><div><font color="#666666">      buf = g_array_index (mhsink->bufqueue, GstBuffer *, i);</font></div><div><font color="#666666">      GST_LOG_OBJECT (mhsink, "Removing buffer %p (%d) with refcount %d", buf,</font></div>




<div><font color="#666666">          i, GST_MINI_OBJECT_REFCOUNT (buf));</font></div><div><font color="#666666">      gst_buffer_unref (buf);</font></div><div><font color="#666666">      mhsink->bufqueue = g_array_remove_index (mhsink->bufqueue, i);</font></div>




<div><font color="#666666">    }</font></div><div><font color="#666666">    /* freeing the array is done in _finalize */</font></div><div><font color="#666666">  }</font></div><div><font color="#666666">  GST_OBJECT_FLAG_UNSET (mhsink, GST_MULTI_HANDLE_SINK_OPEN);</font></div>




<div><font color="#666666"><br></font></div><div><font color="#666666">  return TRUE;</font></div><div><font color="#666666">}</font></div><div><br></div></div></blockquote></div></div><div><div>
<div class="gmail_extra"><br><br><div class="gmail_quote">
On Mon, Feb 4, 2013 at 4:45 PM, 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<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><div><font color="#990000">(gst-switch-srv:31051): GStreamer-CRITICAL **: <b>gst_poll_get_read_gpollfd</b>: assertion `set != NULL' failed</font></div>





</div><div><div><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><div><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>And the stack looks like:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font color="#666666">#0  <b>g_source_attach</b> (source=source@entry=0x0, context=0x0) at gmain.c:1154</font></div>





</div><div><div><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><div><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><div><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><div><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><div><font color="#666666">#5  0x0000000000405303 in <b>gst_worker_prepare_unsafe</b> (worker=worker@entry=0x706800) at gstworker.c:621</font></div></div><div><div><font color="#666666">#6  0x00000000004055a0 in <b>gst_worker_reset</b> (worker=0x706800) at gstworker.c:705</font></div>





</div><div><div><font color="#666666">#7  0x000000000040c138 in <b>gst_composite_apply_parameters</b> (composite=composite@entry=0x706800) at gstcomposite.c:320</font></div></div><div><div><font color="#666666">#8  0x000000000040c608 in <b>gst_composite_commit_transition</b> (composite=0x706800) at gstcomposite.c:497</font></div>





</div><div><div><font color="#666666">#9  <b>gst_composite_null</b> (composite=0x706800) at gstcomposite.c:583</font></div></div><div><div><font color="#666666">#10 0x0000000000406369 in <b>gst_worker_state_ready_to_null</b> (worker=0x706800) at gstworker.c:438</font></div>





</div><div><div><font color="#666666">#11 <b>gst_worker_pipeline_state_changed</b> (statechange=<optimized out>, worker=0x706800) at gstworker.c:472</font></div></div><div><div><font color="#666666">#12 <b>gst_worker_message</b> (bus=<optimized out>, message=0x2278530, worker=0x706800) at gstworker.c:542</font></div>





</div><div><div><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><div><font color="#666666">#14 0x00007ffff7252ee5 in <b>g_main_dispatch</b> (context=0x62a0f0) at gmain.c:3054</font></div></div><div><div><font color="#666666">#15 <b>g_main_context_dispatch</b> (context=context@entry=0x62a0f0) at gmain.c:3630</font></div>





</div><div><div><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><div><font color="#666666">#17 0x00007ffff725369a in <b>g_main_loop_run</b> (loop=0x706760) at gmain.c:3895</font></div></div><div><div><font color="#666666">#18 0x00000000004044e0 in <b>gst_switch_server_run</b> (srv=0x708000) at gstswitchserver.c:1095</font></div>





</div><div><div><font color="#666666">#19 <b>main</b> (argc=1, argv=0x7fffffffe578) at gstswitchserver.c:1119</font></div></div></blockquote><div><div><div><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><div><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></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>