GVariantTypeInfo: fix thread safety bug
authorRyan Lortie <desrt@desrt.ca>
Thu, 25 Feb 2010 23:09:23 +0000 (18:09 -0500)
committerRyan Lortie <desrt@desrt.ca>
Thu, 25 Feb 2010 23:13:59 +0000 (18:13 -0500)
commita3c7406cce2af55aea4ffdf1ceb8b828f5ef3219
tree3f5a04a043adbb49c6f59bac5d7e0decebc391b5
parent43b6c2b8f5a9000373b448eca7edea2e3dad4248
GVariantTypeInfo: fix thread safety bug

Issue caught by Michael Meeks.  This patch based on his.

GVariantTypeInfo was dropping the reference count on the TypeInfo
structure before removing it from the hash table.  This means that
another thread could come along and grab the value from the hash table
in the meantime.

Solve this by holding the lock on the table before dropping the
reference.

Also: move the hash table initialisation inside of the lock to remove
the standard double-initialisation race plus a more insidious issue
caused by the fact that we free the hash table once it becomes empty.
glib/gvarianttypeinfo.c