< prev index next >

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

Print this page
rev 9617 : imported patch 8u121.patch


1981 static gboolean
1982 type_iface_vtable_base_init_Wm (TypeNode *iface,
1983                 TypeNode *node)
1984 {
1985   IFaceEntry *entry;
1986   IFaceHolder *iholder;
1987   GTypeInterface *vtable = NULL;
1988   TypeNode *pnode;
1989 
1990   /* type_iface_retrieve_holder_info_Wm() doesn't modify write lock for returning NULL */
1991   iholder = type_iface_retrieve_holder_info_Wm (iface, NODE_TYPE (node), TRUE);
1992   if (!iholder)
1993     return FALSE;   /* we don't modify write lock upon FALSE */
1994 
1995   type_iface_ensure_dflt_vtable_Wm (iface);
1996 
1997   entry = type_lookup_iface_entry_L (node, iface);
1998 
1999   g_assert (iface->data && entry && entry->vtable == NULL && iholder && iholder->info);
2000 





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


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





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




1981 static gboolean
1982 type_iface_vtable_base_init_Wm (TypeNode *iface,
1983                 TypeNode *node)
1984 {
1985   IFaceEntry *entry;
1986   IFaceHolder *iholder;
1987   GTypeInterface *vtable = NULL;
1988   TypeNode *pnode;
1989 
1990   /* type_iface_retrieve_holder_info_Wm() doesn't modify write lock for returning NULL */
1991   iholder = type_iface_retrieve_holder_info_Wm (iface, NODE_TYPE (node), TRUE);
1992   if (!iholder)
1993     return FALSE;   /* we don't modify write lock upon FALSE */
1994 
1995   type_iface_ensure_dflt_vtable_Wm (iface);
1996 
1997   entry = type_lookup_iface_entry_L (node, iface);
1998 
1999   g_assert (iface->data && entry && entry->vtable == NULL && iholder && iholder->info);
2000 
2001 #ifdef GSTREAMER_LITE
2002   if (entry == NULL)
2003     return FALSE;
2004 #endif // GSTREAMER_LITE
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)
2023     {
2024       G_WRITE_UNLOCK (&type_rw_lock);
2025       iface->data->iface.vtable_init_base (vtable);


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 #ifdef GSTREAMER_LITE
2051   if (entry == NULL)
2052     return;
2053 #endif // GSTREAMER_LITE
2054 
2055   entry->init_state = INITIALIZED;
2056 
2057   vtable = entry->vtable;
2058 
2059   if (iholder->info->interface_init)
2060     {
2061       G_WRITE_UNLOCK (&type_rw_lock);
2062       if (iholder->info->interface_init)
2063     iholder->info->interface_init (vtable, iholder->info->interface_data);
2064       G_WRITE_LOCK (&type_rw_lock);
2065     }
2066 
2067   for (i = 0; i < static_n_iface_check_funcs; i++)
2068     {
2069       GTypeInterfaceCheckFunc check_func = static_iface_check_funcs[i].check_func;
2070       gpointer check_data = static_iface_check_funcs[i].check_data;
2071 
2072       G_WRITE_UNLOCK (&type_rw_lock);
2073       check_func (check_data, (gpointer)vtable);


< prev index next >