public MySqlField(Driver driver) { this.driver = driver; connVersion = driver.Version; maxLength = 1; binaryOk = true; }
private void EnqueueIdle(Driver driver) { driver.IdleSince = DateTime.Now; idlePool.Enqueue(driver); }
/// <summary> /// Removes a connection from the in use pool. The only situations where this method /// would be called are when a connection that is in use gets some type of fatal exception /// or when the connection is being returned to the pool and it's too old to be /// returned. /// </summary> /// <param name="driver"></param> public void RemoveConnection(Driver driver) { lock ((inUsePool as ICollection).SyncRoot) { if (inUsePool.Contains(driver)) { inUsePool.Remove(driver); Interlocked.Increment(ref available); autoEvent.Set(); } } // if we are being cleared and we are out of connections then have // the manager destroy us. if (beingCleared && NumConnections == 0) MySqlPoolManager.RemoveClearedPool(this); }
public void ReleaseConnection(Driver driver) { lock ((inUsePool as ICollection).SyncRoot) { if (inUsePool.Contains(driver)) inUsePool.Remove(driver); } if (driver.ConnectionLifetimeExpired() || beingCleared) { driver.Close(); Debug.Assert(!idlePool.Contains(driver)); } else { lock ((idlePool as ICollection).SyncRoot) { EnqueueIdle(driver); } } Interlocked.Increment(ref available); autoEvent.Set(); }
public static Driver Create(MySqlConnectionStringBuilder settings) { Driver d = null; #if !NETSTANDARD1_6 try { if (MySqlTrace.QueryAnalysisEnabled || settings.Logging || settings.UseUsageAdvisor) d = new TracingDriver(settings); } catch (TypeInitializationException ex) { if (!(ex.InnerException is SecurityException)) throw ex; //Only rethrow if InnerException is not a SecurityException. If it is a SecurityException then //we couldn't initialize MySqlTrace because we don't have unmanaged code permissions. } #else if (settings.Logging || settings.UseUsageAdvisor) { throw new NotImplementedException( "Logging not supported in this WinRT release." ); } #endif if (d == null) d = new Driver(settings); //this try was added as suggested fix submitted on MySql Bug 72025, socket connections are left in CLOSE_WAIT status when connector fails to open a new connection. //the bug is present when the client try to get more connections that the server support or has configured in the max_connections variable. try { d.Open(); } catch (Exception ex) { d.Dispose(); throw ex; } return d; }
public NativeDriver(Driver owner) { this.owner = owner; threadId = -1; }
public static void RemoveConnection(Driver driver) { Debug.Assert(driver != null); MySqlPool pool = driver.Pool; if (pool == null) return; pool.RemoveConnection(driver); }