Beispiel #1
0
        internal void GetWriterLock()
        {
            IncrementRef();
#if NET40
            _rwsObject.EnterWriteLock();
#else
            _rwsObject.AcquireWriterLock(Timeout.Infinite);
#endif
        }
Beispiel #2
0
        /// <summary>
        /// See <see cref="IServiceContainer.Add"/>.
        /// </summary>
        public virtual void Add(AbstractServiceEntry entry)
        {
            CheckNotDisposed();
            Ensure.Parameter.IsNotNull(entry, nameof(entry));

            using (FLock.AcquireWriterLock())
            {
                if (FEntries.TryGetValue(entry, out AbstractServiceEntry existing))
                {
                    //
                    // Abstract bejegyzest felul lehet irni (de csak azt).
                    //

                    if (existing.GetType() != typeof(AbstractServiceEntry))
                    {
                        throw new ServiceAlreadyRegisteredException(string.Format(Resources.Culture, Resources.ALREADY_REGISTERED, existing.FriendlyName()));
                    }

                    if (ShouldDispose(existing))
                    {
                        //
                        // "AbstractServiceEntry"-nel nincs tenyleges Dispose() logika csak azert van hivva
                        // h ne legyen figyelmeztetes a debug kimeneten -> DisposeAsync() hivasnak se lenne
                        // ertelme.
                        //

                        existing.Dispose();
                    }
                }

                //
                // Ha volt mar bejegyzes adott kulccsal akkor felulijra kulomben hozzaadja.
                //

                FEntries[entry] = entry;
            }
        }
Beispiel #3
0
        /// <inheritdoc />
        public override void SaveSession(UploadSession session, bool isCreate)
        {
            // TODO: uncomment, add check to make sure object is the same
            //if (isCreate)
            //{
            try
            {
#if NET35
                _sessionsLock.EnterWriteLock();
#else
                _sessionsLock.AcquireWriterLock(-1);
#endif
                _uploadSessions[session.UploadSessionId] = session;
            }
            finally
            {
#if NET35
                _sessionsLock.ExitWriteLock();
#else
                _sessionsLock.ReleaseWriterLock();
#endif
            }
            //}
        }
Beispiel #4
0
        public static CtorAccessor Get(Type type)
        {
            CtorAccessor ctorAccessor = null;

            try {
#if (dotNET35 || dotNET4)
                ctorAccessorsCacheLock.EnterReadLock();
#else
                ctorAccessorsCacheLock.AcquireReaderLock(-1);
#endif
                if (ctorAccessorsCache.TryGetValue(type, out ctorAccessor))
                {
                    return(ctorAccessor);
                }
            }
            finally {
#if (dotNET35 || dotNET4)
                ctorAccessorsCacheLock.ExitReadLock();
#else
                ctorAccessorsCacheLock.ReleaseReaderLock();
#endif
            }
            try {
#if (dotNET35 || dotNET4)
                ctorAccessorsCacheLock.EnterWriteLock();
#else
                ctorAccessorsCacheLock.AcquireWriterLock(-1);
#endif
                if (ctorAccessorsCache.TryGetValue(type, out ctorAccessor))
                {
                    return(ctorAccessor);
                }
                ctorAccessor             = new CtorAccessor(type);
                ctorAccessorsCache[type] = ctorAccessor;
            }
            finally {
#if (dotNET35 || dotNET4)
                ctorAccessorsCacheLock.ExitWriteLock();
#else
                ctorAccessorsCacheLock.ReleaseWriterLock();
#endif
            }
            return(ctorAccessor);
        }
        public static ObjectSerializer Get(Type type)
        {
            ObjectSerializer serializer = null;

            try {
#if (dotNET35 || dotNET4)
                serializersCacheLock.EnterReadLock();
#else
                serializersCacheLock.AcquireReaderLock(-1);
#endif
                if (serializersCache.TryGetValue(type, out serializer))
                {
                    return(serializer);
                }
            }
            finally {
#if (dotNET35 || dotNET4)
                serializersCacheLock.ExitReadLock();
#else
                serializersCacheLock.ReleaseReaderLock();
#endif
            }
            try {
#if (dotNET35 || dotNET4)
                serializersCacheLock.EnterWriteLock();
#else
                serializersCacheLock.AcquireWriterLock(-1);
#endif
                if (serializersCache.TryGetValue(type, out serializer))
                {
                    return(serializer);
                }
                serializer             = new ObjectSerializer(type);
                serializersCache[type] = serializer;
            }
            finally {
#if (dotNET35 || dotNET4)
                serializersCacheLock.ExitWriteLock();
#else
                serializersCacheLock.ReleaseWriterLock();
#endif
            }
            return(serializer);
        }
Beispiel #6
0
        /// <inheritdoc />
        public override void RemoveSession(string uploadSessionId)
        {
            try
            {
#if NET35
                _requestsLock.EnterWriteLock();
#else
                _requestsLock.AcquireWriterLock(-1);
#endif

                _uploadRequests.Remove(uploadSessionId);
            }
            finally
            {
#if NET35
                _requestsLock.ExitWriteLock();
#else
                _requestsLock.ReleaseWriterLock();
#endif
            }

            try
            {
#if NET35
                _sessionsLock.EnterWriteLock();
#else
                _sessionsLock.AcquireWriterLock(-1);
#endif

                _uploadSessions.Remove(uploadSessionId);
            }
            finally
            {
#if NET35
                _sessionsLock.ExitWriteLock();
#else
                _sessionsLock.ReleaseWriterLock();
#endif
            }
        }
        public void EnterWriteLock(out ReaderWriterLockCookie cookie, int millisecondsTimeout)
        {
            cookie = new ReaderWriterLockCookie();
#if NET35_OR_GREATER || NETCOREAPP || NETSTANDARD
            if (ReaderWriterLock.IsWriteLockHeld)
            {
                return;
            }
            if (ReaderWriterLock.IsReadLockHeld)
            {
                cookie.FromRead = true;
                ReaderWriterLock.ExitReadLock();
            }
            if (!ReaderWriterLock.TryEnterWriteLock(millisecondsTimeout))
            {
                if (cookie.FromRead)
                {
                    if (!ReaderWriterLock.TryEnterReadLock(millisecondsTimeout))
                    {
                        throw new TimeoutException("恢复读锁超时");
                    }
                }
                throw new TimeoutException("获取写锁超时");
            }
#else
            if (ReaderWriterLock.IsWriterLockHeld)
            {
                return;
            }
            if (ReaderWriterLock.IsReaderLockHeld)
            {
                cookie.FromRead   = true;
                cookie.LockCookie = ReaderWriterLock.UpgradeToWriterLock(millisecondsTimeout);
                return;
            }
            ReaderWriterLock.AcquireWriterLock(millisecondsTimeout);
#endif
        }