Example #1
0
        private bool AddToMarkStack(DependencyNodeCore <DependencyContextType> node, string reason, DependencyNodeCore <DependencyContextType> reason1, DependencyNodeCore <DependencyContextType> reason2)
        {
            if (_marker.MarkNode(node, reason1, reason2, reason))
            {
                if (PerfEventSource.Log.IsEnabled())
                {
                    PerfEventSource.Log.AddedNodeToMarkStack();
                }

                // Pop the top node of the mark stack
                if (_stackPopRandomizer == null)
                {
                    _markStack.Push(node);
                }
                else
                {
                    //
                    // Expose output file determinism bugs in our system by randomizing the order nodes are pushed
                    // on to the mark stack.
                    //
                    int randomNodeIndex = _stackPopRandomizer.Next(_markStack.Count);
                    var tempStack       = new Stack <DependencyNodeCore <DependencyContextType> >();

                    for (int i = 0; i < randomNodeIndex; i++)
                    {
                        tempStack.Push(_markStack.Pop());
                    }

                    _markStack.Push(node);

                    while (tempStack.Count > 0)
                    {
                        _markStack.Push(tempStack.Pop());
                    }
                }

                _markedNodes.Add(node);

                node.CallOnMarked(_dependencyContext);

                if (NewMarkedNode != null)
                {
                    NewMarkedNode(node);
                }

                return(true);
            }

            return(false);
        }
        private bool AddToMarkStack(DependencyNodeCore <DependencyContextType> node, string reason, DependencyNodeCore <DependencyContextType> reason1, DependencyNodeCore <DependencyContextType> reason2)
        {
            if (_marker.MarkNode(node, reason1, reason2, reason))
            {
                _markStack.Push(node);
                _markedNodes.Add(node);

                node.CallOnMarked(_dependencyContext);

                if (NewMarkedNode != null)
                {
                    NewMarkedNode(node);
                }

                return(true);
            }

            return(false);
        }