< prev index next >

modules/javafx.media/src/main/native/gstreamer/3rd_party/glib/glib-2.42.1/gobject/gtype.c

Print this page
rev 10250 : imported patch 9-cpu-1701.patch


1983  * be used. Note that the write lock is not modified upon a FALSE
1984  * return.
1985  */
1986 static gboolean
1987 type_iface_vtable_base_init_Wm (TypeNode *iface,
1988                 TypeNode *node)
1989 {
1990   IFaceEntry *entry;
1991   IFaceHolder *iholder;
1992   GTypeInterface *vtable = NULL;
1993   TypeNode *pnode;
1994 
1995   /* type_iface_retrieve_holder_info_Wm() doesn't modify write lock for returning NULL */
1996   iholder = type_iface_retrieve_holder_info_Wm (iface, NODE_TYPE (node), TRUE);
1997   if (!iholder)
1998     return FALSE;   /* we don't modify write lock upon FALSE */
1999 
2000   type_iface_ensure_dflt_vtable_Wm (iface);
2001 
2002   entry = type_lookup_iface_entry_L (node, iface);




2003 
2004   g_assert (iface->data && entry && entry->vtable == NULL && iholder && iholder->info);
2005 
2006   entry->init_state = IFACE_INIT;
2007 
2008   pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
2009   if (pnode)    /* want to copy over parent iface contents */
2010     {
2011       IFaceEntry *pentry = type_lookup_iface_entry_L (pnode, iface);
2012 
2013       if (pentry)
2014     vtable = g_memdup (pentry->vtable, iface->data->iface.vtable_size);
2015     }
2016   if (!vtable)
2017     vtable = g_memdup (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
2018   entry->vtable = vtable;
2019   vtable->g_type = NODE_TYPE (iface);
2020   vtable->g_instance_type = NODE_TYPE (node);
2021 
2022   if (iface->data->iface.vtable_init_base)


2029 }
2030 
2031 /* Finishes what type_iface_vtable_base_init_Wm started by
2032  * calling the interface init function.
2033  * this function may only be called for types with their
2034  * own interface holder info, i.e. types for which
2035  * g_type_add_interface*() was called and not children thereof.
2036  */
2037 static void
2038 type_iface_vtable_iface_init_Wm (TypeNode *iface,
2039                  TypeNode *node)
2040 {
2041   IFaceEntry *entry = type_lookup_iface_entry_L (node, iface);
2042   IFaceHolder *iholder = type_iface_peek_holder_L (iface, NODE_TYPE (node));
2043   GTypeInterface *vtable = NULL;
2044   guint i;
2045 
2046   /* iholder->info should have been filled in by type_iface_vtable_base_init_Wm() */
2047   g_assert (iface->data && entry && iholder && iholder->info);
2048   g_assert (entry->init_state == IFACE_INIT); /* assert prior base_init() */




2049 
2050   entry->init_state = INITIALIZED;
2051 
2052   vtable = entry->vtable;
2053 
2054   if (iholder->info->interface_init)
2055     {
2056       G_WRITE_UNLOCK (&type_rw_lock);
2057       if (iholder->info->interface_init)
2058     iholder->info->interface_init (vtable, iholder->info->interface_data);
2059       G_WRITE_LOCK (&type_rw_lock);
2060     }
2061 
2062   for (i = 0; i < static_n_iface_check_funcs; i++)
2063     {
2064       GTypeInterfaceCheckFunc check_func = static_iface_check_funcs[i].check_func;
2065       gpointer check_data = static_iface_check_funcs[i].check_data;
2066 
2067       G_WRITE_UNLOCK (&type_rw_lock);
2068       check_func (check_data, (gpointer)vtable);




1983  * be used. Note that the write lock is not modified upon a FALSE
1984  * return.
1985  */
1986 static gboolean
1987 type_iface_vtable_base_init_Wm (TypeNode *iface,
1988                 TypeNode *node)
1989 {
1990   IFaceEntry *entry;
1991   IFaceHolder *iholder;
1992   GTypeInterface *vtable = NULL;
1993   TypeNode *pnode;
1994 
1995   /* type_iface_retrieve_holder_info_Wm() doesn't modify write lock for returning NULL */
1996   iholder = type_iface_retrieve_holder_info_Wm (iface, NODE_TYPE (node), TRUE);
1997   if (!iholder)
1998     return FALSE;   /* we don't modify write lock upon FALSE */
1999 
2000   type_iface_ensure_dflt_vtable_Wm (iface);
2001 
2002   entry = type_lookup_iface_entry_L (node, iface);
2003 #ifdef GSTREAMER_LITE
2004   if (entry == NULL)
2005     return FALSE;
2006 #endif // GSTREAMER_LITE
2007 
2008   g_assert (iface->data && entry && entry->vtable == NULL && iholder && iholder->info);
2009 
2010   entry->init_state = IFACE_INIT;
2011 
2012   pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
2013   if (pnode)    /* want to copy over parent iface contents */
2014     {
2015       IFaceEntry *pentry = type_lookup_iface_entry_L (pnode, iface);
2016 
2017       if (pentry)
2018     vtable = g_memdup (pentry->vtable, iface->data->iface.vtable_size);
2019     }
2020   if (!vtable)
2021     vtable = g_memdup (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
2022   entry->vtable = vtable;
2023   vtable->g_type = NODE_TYPE (iface);
2024   vtable->g_instance_type = NODE_TYPE (node);
2025 
2026   if (iface->data->iface.vtable_init_base)


2033 }
2034 
2035 /* Finishes what type_iface_vtable_base_init_Wm started by
2036  * calling the interface init function.
2037  * this function may only be called for types with their
2038  * own interface holder info, i.e. types for which
2039  * g_type_add_interface*() was called and not children thereof.
2040  */
2041 static void
2042 type_iface_vtable_iface_init_Wm (TypeNode *iface,
2043                  TypeNode *node)
2044 {
2045   IFaceEntry *entry = type_lookup_iface_entry_L (node, iface);
2046   IFaceHolder *iholder = type_iface_peek_holder_L (iface, NODE_TYPE (node));
2047   GTypeInterface *vtable = NULL;
2048   guint i;
2049 
2050   /* iholder->info should have been filled in by type_iface_vtable_base_init_Wm() */
2051   g_assert (iface->data && entry && iholder && iholder->info);
2052   g_assert (entry->init_state == IFACE_INIT); /* assert prior base_init() */
2053 #ifdef GSTREAMER_LITE
2054   if (entry == NULL)
2055     return;
2056 #endif // GSTREAMER_LITE
2057 
2058   entry->init_state = INITIALIZED;
2059 
2060   vtable = entry->vtable;
2061 
2062   if (iholder->info->interface_init)
2063     {
2064       G_WRITE_UNLOCK (&type_rw_lock);
2065       if (iholder->info->interface_init)
2066     iholder->info->interface_init (vtable, iholder->info->interface_data);
2067       G_WRITE_LOCK (&type_rw_lock);
2068     }
2069 
2070   for (i = 0; i < static_n_iface_check_funcs; i++)
2071     {
2072       GTypeInterfaceCheckFunc check_func = static_iface_check_funcs[i].check_func;
2073       gpointer check_data = static_iface_check_funcs[i].check_data;
2074 
2075       G_WRITE_UNLOCK (&type_rw_lock);
2076       check_func (check_data, (gpointer)vtable);


< prev index next >