System.Runtime.Remoting.ServerIdentity.RaceSetServerObjectChain C# (CSharp) Method

RaceSetServerObjectChain() private method

private RaceSetServerObjectChain ( IMessageSink serverObjectChain ) : IMessageSink
serverObjectChain IMessageSink
return IMessageSink
        internal IMessageSink RaceSetServerObjectChain(
            IMessageSink serverObjectChain)
        {
            if (_serverObjectChain == null)
            {
                bool fLocked = false;
                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                    Monitor.ReliableEnter(this, ref fLocked);
                    if (_serverObjectChain == null)
                    {
                        _serverObjectChain = serverObjectChain;
                    }
                }
                finally
                {
                    if (fLocked)
                    {
                        Monitor.Exit(this);
                    }
                }
            }
            return _serverObjectChain;       
        }
    

Usage Example

Esempio n. 1
0
        IntPtr _privateData; // Used for DoCallbackInEE

        // The _delegate should really be on an agile object otherwise
        // the whole point of doing a callBack is moot. However, even if it
        // is not, remoting and serialization together will ensure that
        // everything happens as expected and there is no smuggling.

        internal TransitionCall(
            IntPtr targetCtxID, 
            CrossContextDelegate deleg)
        {
            BCLDebug.Assert(targetCtxID!=IntPtr.Zero, "bad target ctx for call back");
            _sourceCtxID = Thread.CurrentContext.InternalContextID;
            _targetCtxID = targetCtxID;
            _delegate = deleg;
            _targetDomainID = 0;
            _privateData = IntPtr.Zero;

                // We are going to another context in the same app domain
                _srvID = new ServerIdentity(
                                null, 
                                Thread.GetContextInternal(_targetCtxID));
                _ID = _srvID;
                _ID.RaceSetChannelSink(CrossContextChannel.MessageSink);
                _srvID.RaceSetServerObjectChain(this);
                
            //DBG Console.WriteLine("### TransitionCall ctor: " + Int32.Format(_sourceCtxID,"x") + ":" + Int32.Format(_targetCtxID,"x"));
        } // TransitionCall