mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-27 10:40:34 +00:00
gst/gst.c: Ignore EINTR when reading from the child registry pipe.
Original commit message from CVS: * gst/gst.c: (ensure_current_registry_forking): Ignore EINTR when reading from the child registry pipe. Explicitly ignore the return value from close, since it makes no difference. * gst/gstminiobject.c: (gst_mini_object_ref), (gst_mini_object_unref): When debugging refcounts, check GST_IS_MINI_OBJECT and warn. * gst/gstregistry.c: (_priv_gst_registry_remove_cache_plugins): When removing cached plugins, remove their features too, so they're not visible after they've disappeared. * gst/gstutils.c: (prepare_link_maybe_ghosting): In the unlikely case that we are linking pads with no parents, don't crash trying to get the non-existent parent bin. * gst/parse/grammar.y: Output debug in the PIPELINE category
This commit is contained in:
parent
f26e917bc3
commit
0a5e6e1132
6 changed files with 56 additions and 13 deletions
22
ChangeLog
22
ChangeLog
|
@ -1,3 +1,25 @@
|
|||
2006-12-09 Jan Schmidt <thaytan@mad.scientist.com>
|
||||
|
||||
* gst/gst.c: (ensure_current_registry_forking):
|
||||
Ignore EINTR when reading from the child registry pipe.
|
||||
Explicitly ignore the return value from close, since it makes no
|
||||
difference.
|
||||
|
||||
* gst/gstminiobject.c: (gst_mini_object_ref),
|
||||
(gst_mini_object_unref):
|
||||
When debugging refcounts, check GST_IS_MINI_OBJECT and warn.
|
||||
|
||||
* gst/gstregistry.c: (_priv_gst_registry_remove_cache_plugins):
|
||||
When removing cached plugins, remove their features too, so they're
|
||||
not visible after they've disappeared.
|
||||
|
||||
* gst/gstutils.c: (prepare_link_maybe_ghosting):
|
||||
In the unlikely case that we are linking pads with no parents, don't
|
||||
crash trying to get the non-existent parent bin.
|
||||
|
||||
* gst/parse/grammar.y:
|
||||
Output debug in the PIPELINE category
|
||||
|
||||
2005-03-08 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
Patch by: René Stadler <mail at renestadler dot de>
|
||||
|
|
23
gst/gst.c
23
gst/gst.c
|
@ -699,6 +699,7 @@ ensure_current_registry_forking (GstRegistry * default_registry,
|
|||
#ifdef HAVE_FORK
|
||||
pid_t pid;
|
||||
int pfd[2];
|
||||
int ret;
|
||||
|
||||
/* We fork here, and let the child read and possibly rebuild the registry.
|
||||
* After that, the parent will re-read the freshly generated registry. */
|
||||
|
@ -725,7 +726,7 @@ ensure_current_registry_forking (GstRegistry * default_registry,
|
|||
gchar res_byte;
|
||||
|
||||
/* this is the child. Close the read pipe */
|
||||
close (pfd[0]);
|
||||
(void) close (pfd[0]);
|
||||
|
||||
GST_DEBUG ("child reading registry cache");
|
||||
res =
|
||||
|
@ -740,20 +741,26 @@ ensure_current_registry_forking (GstRegistry * default_registry,
|
|||
|
||||
/* write a result byte to the pipe */
|
||||
res_byte = res ? '1' : '0';
|
||||
if (write (pfd[1], &res_byte, 1) != 1 || close (pfd[1]) != 0) {
|
||||
/* could not write to pipe, probably means parent has exited before us */
|
||||
}
|
||||
do {
|
||||
ret = write (pfd[1], &res_byte, 1);
|
||||
} while (ret == -1 && errno == EINTR);
|
||||
/* if ret == -1 now, we could not write to pipe, probably
|
||||
* means parent has exited before us */
|
||||
(void) close (pfd[1]);
|
||||
|
||||
_exit (0);
|
||||
} else {
|
||||
int ret;
|
||||
gchar res_byte;
|
||||
|
||||
/* parent. Close write pipe */
|
||||
close (pfd[1]);
|
||||
(void) close (pfd[1]);
|
||||
|
||||
/* Wait for result from the pipe */
|
||||
GST_DEBUG ("Waiting for data from child");
|
||||
ret = read (pfd[0], &res_byte, 1);
|
||||
do {
|
||||
ret = read (pfd[0], &res_byte, 1);
|
||||
} while (ret == -1 && errno == EINTR);
|
||||
|
||||
if (ret == -1) {
|
||||
g_set_error (error, GST_CORE_ERROR, GST_CORE_ERROR_FAILED,
|
||||
_("Error re-scanning registry %s: %s"),
|
||||
|
@ -761,7 +768,7 @@ ensure_current_registry_forking (GstRegistry * default_registry,
|
|||
close (pfd[0]);
|
||||
return FALSE;
|
||||
}
|
||||
close (pfd[0]);
|
||||
(void) close (pfd[0]);
|
||||
|
||||
/* Wait to ensure the child is reaped, but ignore the result */
|
||||
GST_DEBUG ("parent waiting on child");
|
||||
|
|
|
@ -250,8 +250,9 @@ gst_mini_object_ref (GstMiniObject * mini_object)
|
|||
* function might resurect an object
|
||||
g_return_val_if_fail (mini_object->refcount > 0, NULL);
|
||||
*/
|
||||
|
||||
#ifdef DEBUG_REFCOUNT
|
||||
g_return_val_if_fail (GST_IS_MINI_OBJECT (mini_object), NULL);
|
||||
|
||||
GST_CAT_LOG (GST_CAT_REFCOUNTING, "%p ref %d->%d",
|
||||
mini_object,
|
||||
GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object),
|
||||
|
@ -295,6 +296,8 @@ gst_mini_object_unref (GstMiniObject * mini_object)
|
|||
g_return_if_fail (mini_object->refcount > 0);
|
||||
|
||||
#ifdef DEBUG_REFCOUNT
|
||||
g_return_if_fail (GST_IS_MINI_OBJECT (mini_object));
|
||||
|
||||
GST_CAT_LOG (GST_CAT_REFCOUNTING, "%p unref %d->%d",
|
||||
mini_object,
|
||||
GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object),
|
||||
|
|
|
@ -940,6 +940,7 @@ _priv_gst_registry_remove_cache_plugins (GstRegistry * registry)
|
|||
GST_DEBUG_OBJECT (registry, "removing cached plugin \"%s\"",
|
||||
GST_STR_NULL (plugin->filename));
|
||||
registry->plugins = g_list_delete_link (registry->plugins, g);
|
||||
gst_registry_remove_features_for_plugin_unlocked (registry, plugin);
|
||||
gst_object_unref (plugin);
|
||||
changed = TRUE;
|
||||
}
|
||||
|
|
|
@ -1262,6 +1262,17 @@ prepare_link_maybe_ghosting (GstPad ** src, GstPad ** sink,
|
|||
e1 = GST_OBJECT_PARENT (*src);
|
||||
e2 = GST_OBJECT_PARENT (*sink);
|
||||
|
||||
if (G_UNLIKELY (e1 == NULL)) {
|
||||
GST_WARNING ("Trying to ghost a pad that doesn't have a parent: %"
|
||||
GST_PTR_FORMAT, *src);
|
||||
return FALSE;
|
||||
}
|
||||
if (G_UNLIKELY (e2 == NULL)) {
|
||||
GST_WARNING ("Trying to ghost a pad that doesn't have a parent: %"
|
||||
GST_PTR_FORMAT, *sink);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (GST_OBJECT_PARENT (e1) == GST_OBJECT_PARENT (e2)) {
|
||||
GST_CAT_INFO (GST_CAT_PADS, "%s and %s in same bin, no need for ghost pads",
|
||||
GST_OBJECT_NAME (e1), GST_OBJECT_NAME (e2));
|
||||
|
@ -1274,9 +1285,8 @@ prepare_link_maybe_ghosting (GstPad ** src, GstPad ** sink,
|
|||
/* we need to setup some ghost pads */
|
||||
root = find_common_root (e1, e2);
|
||||
if (!root) {
|
||||
g_warning
|
||||
("Trying to connect elements that don't share a common ancestor: %s and %s\n",
|
||||
GST_ELEMENT_NAME (e1), GST_ELEMENT_NAME (e2));
|
||||
g_warning ("Trying to connect elements that don't share a common "
|
||||
"ancestor: %s and %s", GST_ELEMENT_NAME (e1), GST_ELEMENT_NAME (e2));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -281,7 +281,7 @@ gst_parse_element_set (gchar *value, GstElement *element, graph_t *graph)
|
|||
|
||||
if (gst_child_proxy_lookup (GST_OBJECT (element), value, &target, &pspec)) {
|
||||
value_type = G_PARAM_SPEC_VALUE_TYPE (pspec);
|
||||
GST_LOG ("parsing property %s as a %s", pspec->name,
|
||||
GST_CAT_LOG (GST_CAT_PIPELINE, "parsing property %s as a %s", pspec->name,
|
||||
g_type_name (value_type));
|
||||
g_value_init (&v, value_type);
|
||||
if (!gst_value_deserialize (&v, pos))
|
||||
|
|
Loading…
Reference in a new issue