public static bool Wait(object obj, int millisecondsTimeout, bool exitContext) {
try {
- if (exitContext) SynchronizationAttribute.ExitContext ();
+ if (exitContext) {
+#if MONOTOUCH
+ throw new NotSupportedException ("exitContext == true is not supported");
+#else
+ SynchronizationAttribute.ExitContext ();
+#endif
+ }
return Wait (obj, millisecondsTimeout);
}
finally {
public static bool Wait(object obj, TimeSpan timeout, bool exitContext) {
try {
- if (exitContext) SynchronizationAttribute.ExitContext ();
+ if (exitContext) {
+#if MONOTOUCH
+ throw new NotSupportedException ("exitContext == true is not supported");
+#else
+ SynchronizationAttribute.ExitContext ();
+#endif
+ }
return Wait (obj, timeout);
}
finally {
}
}
-#if NET_4_0 || MOONLIGHT
[MethodImplAttribute(MethodImplOptions.InternalCall)]
extern static void try_enter_with_atomic_var (object obj, int millisecondsTimeout, ref bool lockTaken);
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ extern static void enter_with_atomic_var (object obj, ref bool lockTaken);
+
+ // Can't make this an icall since it has the same name as the other Enter method
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Enter (object obj, ref bool lockTaken)
{
- TryEnter (obj, Timeout.Infinite, ref lockTaken);
+ enter_with_atomic_var (obj, ref lockTaken);
}
public static void TryEnter (object obj, ref bool lockTaken)
try_enter_with_atomic_var (obj, millisecondsTimeout, ref lockTaken);
}
-#endif
+
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ extern static bool Monitor_test_owner (object obj);
+
+ public
+ static bool IsEntered (object obj)
+ {
+ return Monitor_test_owner(obj);
+ }
}
}