Re: Moving to pointer-sized GType?



On 18 Sep 2001, Owen Taylor wrote:

> Tim Janik <timj gtk org> writes:

> > - g_type_name(rand()) _must_ continue to work, as that's the recommended
> >   way to figure whether a type id is at all valid (it just returns NULL
> >   silently, for invalid type ids). so for this, we'll have to do an extra
> >   lock and keep track of valid pointers to figure invalid things passed in.
> 
> This is no more of a valid operation than:
> 
>  gtk_widget_show ((GtkWidget *)rand());

nope, since gtk_widegt_show() is not recommended to figure whether a
widget pointer is a valid pointer ;)

> The only reason why I can think of wanting to this to not segfault
> is for 'invalid cast from (Unknown) to GtkWidget' style warnings,
> but we will get a segfault there anyways before we go to 
> print the name, and we currently get a segfault quickly after
> such warnings in most cases.
> 
> g_type_name() may be semi-performance critical in usages like
> language bindings, and I'd rather not make it a crawlingly slow 
> to try and avoid segfaults on invalid arguments.
> 
> If you _really_ are worried about this, what I would suggest
> is putting a magic value at the start of GTypeNode structures
> which should allow you to catch invalid values with  high
> probability.

that is not good enough, we can already segfault when dereferencing
such a thing, and basically needs a function that returns
is_registered_type_id(num). that's e.g. for things like figuring whether
a certain type has already been registered when you're about to register
a fixed type id, or for g_return_if_fail() in functions that take
type ids.

> (Remember, we don't have 100% certainty currently, since a random
> value can accidentally be a valid type.)

g_type_name(id)!=NULL is a 100% correct check to figure whether id is
an already registered type id, and is actually recommended as such
curently.

> 
> Regards,
>                                         Owen
> 

---
ciaoTJ





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]