public bool PutResource(object resource)
        {
            ITransactionResourcePool o = null;
            IntPtr zero = IntPtr.Zero;
            bool   flag = false;

            try
            {
                o = GetResourcePool();
                if (o == null)
                {
                    return(flag);
                }
                zero = this.GetToken();
                if (o.PutResource(zero, resource) < 0)
                {
                    return(false);
                }
                flag = true;
            }
            finally
            {
                if (!flag && (zero != IntPtr.Zero))
                {
                    Marshal.Release(zero);
                }
                if (o != null)
                {
                    Marshal.ReleaseComObject(o);
                }
            }
            return(flag);
        }
        public object GetResource()
        {
            object obj2 = null;
            ITransactionResourcePool o = null;
            IntPtr zero = IntPtr.Zero;

            try
            {
                zero = this.GetToken();
                o    = GetResourcePool();
                if ((o != null) && (o.GetResource(zero, out obj2) >= 0))
                {
                    Marshal.Release(zero);
                }
            }
            finally
            {
                if (zero != IntPtr.Zero)
                {
                    Marshal.Release(zero);
                }
                if (o != null)
                {
                    Marshal.ReleaseComObject(o);
                }
            }
            return(obj2);
        }
        private static ITransactionResourcePool GetResourcePool()
        {
            ITransactionResourcePool pool = null;
            object pUnk  = null;
            int    flags = 0;

            ((IContext)ContextUtil.ObjectContext).GetProperty(GUID_TransactionProperty, out flags, out pUnk);
            if (((ITransactionProperty)pUnk).GetTransactionResourcePool(out pool) >= 0)
            {
                return(pool);
            }
            return(null);
        }
Ejemplo n.º 4
0
        private static ITransactionResourcePool GetResourcePool()
        {
            ITransactionResourcePool p = null;
            Object prop = null;
            int    junk = 0;
            int    hr   = 0;

            ((IContext)ContextUtil.ObjectContext).GetProperty(GUID_TransactionProperty, out junk, out prop);
            hr = ((ITransactionProperty)prop).GetTransactionResourcePool(out p);
            if (hr >= 0)
            {
                return(p);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 5
0
        /// <include file='doc\ResourcePool.uex' path='docs/doc[@for="ResourcePool.PutResource"]/*' />
        public bool PutResource(Object resource)
        {
            ITransactionResourcePool p = null;
            IntPtr token  = (IntPtr)0;
            bool   result = false;

            try
            {
                // 1. Get the tx pool.
                p = GetResourcePool();
                if (p != null)
                {
                    // 2. Reference our pool token.
                    token = GetToken();
                    // 3. Stuff object into pool.
                    DBG.Info(DBG.Pool, "Placing resource in context");
                    int hr = p.PutResource(token, resource);
                    if (hr < 0)
                    {
                        result = false;
                    }
                    else
                    {
                        result = true;
                    }
                }
            }
            finally
            {
                // If we failed to stick it in, unref it:
                if (!result && token != (IntPtr)0)
                {
                    Marshal.Release(token);
                }
                if (p != null)
                {
                    Marshal.ReleaseComObject(p);
                }
            }
            return(result);
        }
Ejemplo n.º 6
0
        /// <include file='doc\ResourcePool.uex' path='docs/doc[@for="ResourcePool.GetResource"]/*' />
        public Object GetResource()
        {
            Object resource            = null;
            ITransactionResourcePool p = null;
            IntPtr token = (IntPtr)0;

            try
            {
                // 0. Get our token:
                token = GetToken();
                // 1. Get the tx pool.
                p = GetResourcePool();
                if (p != null)
                {
                    // 2. Try to get object out of pool.
                    DBG.Info(DBG.Pool, "Retrieving resource in context");
                    int hr = p.GetResource(token, out resource);
                    // 3. If succeeded, unreference the token.
                    if (hr >= 0)
                    {
                        Marshal.Release(token);
                    }
                }
            }
            finally
            {
                if (token != ((IntPtr)0))
                {
                    Marshal.Release(token);
                }
                if (p != null)
                {
                    Marshal.ReleaseComObject(p);
                }
            }
            return(resource);
        }