2009-08-01 Mike Kestner <mkestner@novell.com>
* glib/GType.cs: lock the types hash to support threaded access and type registration. Apparently gtype access/registration is threadsafe in glib. [Fixes #526229] svn path=/trunk/gtk-sharp/; revision=139247
This commit is contained in:
parent
b122c1b11d
commit
b3f341768f
2 changed files with 24 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
|||
2009-08-01 Mike Kestner <mkestner@novell.com>
|
||||
|
||||
* glib/GType.cs: lock the types hash to support threaded access and
|
||||
type registration. Apparently gtype access/registration is threadsafe
|
||||
in glib. [Fixes #526229]
|
||||
|
||||
2009-07-30 Mike Kestner <mkestner@novell.com>
|
||||
|
||||
* generator/InterfaceGen.cs: remove var keyword usage to fix build on
|
||||
|
|
|
@ -93,11 +93,13 @@ namespace GLib {
|
|||
|
||||
public static void Register (GType native_type, System.Type type)
|
||||
{
|
||||
lock (types) {
|
||||
if (native_type != GType.Pointer && native_type != GType.Boxed && native_type != ManagedValue.GType)
|
||||
types[native_type.Val] = type;
|
||||
if (type != null)
|
||||
gtypes[type] = native_type;
|
||||
}
|
||||
}
|
||||
|
||||
static GType ()
|
||||
{
|
||||
|
@ -128,8 +130,10 @@ namespace GLib {
|
|||
{
|
||||
GType gtype;
|
||||
|
||||
lock (types) {
|
||||
if (gtypes.Contains (type))
|
||||
return (GType)gtypes[type];
|
||||
}
|
||||
|
||||
if (type.IsSubclassOf (typeof (GLib.Object))) {
|
||||
gtype = GLib.Object.LookupGType (type);
|
||||
|
@ -181,8 +185,10 @@ namespace GLib {
|
|||
|
||||
public static Type LookupType (IntPtr typeid)
|
||||
{
|
||||
lock (types) {
|
||||
if (types.Contains (typeid))
|
||||
return (Type)types[typeid];
|
||||
}
|
||||
|
||||
string native_name = Marshaller.Utf8PtrToString (g_type_name (typeid));
|
||||
|
||||
|
@ -365,8 +371,10 @@ namespace GLib {
|
|||
|
||||
internal static GType LookupGObjectType (System.Type t)
|
||||
{
|
||||
lock (types) {
|
||||
if (gtypes.Contains (t))
|
||||
return (GType) gtypes [t];
|
||||
}
|
||||
|
||||
PropertyInfo pi = t.GetProperty ("GType", BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Public);
|
||||
if (pi != null)
|
||||
|
|
Loading…
Add table
Reference in a new issue