Ejemplo n.º 1
0
        [DynamicSecurityMethod] // Methods containing StackCrawlMark local var must be marked DynamicSecurityMethod
#endif
        public static DeserializationToken StartDeserialization()
        {
            if (LocalAppContextSwitches.SerializationGuard)
            {
#if CORECLR
                StackCrawlMark         stackMark = StackCrawlMark.LookForMe;
                DeserializationTracker tracker   = Thread.GetThreadDeserializationTracker(ref stackMark);
#else
                DeserializationTracker tracker = GetThreadDeserializationTracker();
#endif
                if (!tracker.DeserializationInProgress)
                {
                    lock (tracker)
                    {
                        if (!tracker.DeserializationInProgress)
                        {
                            AsyncDeserializationInProgress.Value = true;
                            tracker.DeserializationInProgress    = true;
                            return(new DeserializationToken(tracker));
                        }
                    }
                }
            }

            return(new DeserializationToken(null));
        }
Ejemplo n.º 2
0
        private static DeserializationTracker GetThreadDeserializationTracker()
        {
            if (t_deserializationTracker == null)
            {
                t_deserializationTracker = new DeserializationTracker();
            }

            return(t_deserializationTracker);
        }
        // Declares that the current thread and async context have begun deserialization.
        // In this state, if the SerializationGuard or other related AppContext switches are set,
        // actions likely to be dangerous during deserialization, such as starting a process will be blocked.
        // Returns a DeserializationToken that must be disposed to remove the deserialization state.
        public static DeserializationToken StartDeserialization()
        {
            if (LocalAppContextSwitches.SerializationGuard)
            {
                DeserializationTracker tracker = GetThreadDeserializationTracker();
                if (!tracker.DeserializationInProgress)
                {
                    lock (tracker)
                    {
                        if (!tracker.DeserializationInProgress)
                        {
                            AsyncDeserializationInProgress.Value = true;
                            tracker.DeserializationInProgress    = true;
                            return(new DeserializationToken(tracker));
                        }
                    }
                }
            }

            return(new DeserializationToken(null));
        }
Ejemplo n.º 4
0
 internal DeserializationToken(DeserializationTracker tracker)
 {
     _tracker = tracker;
 }