diff --git a/setup.py b/setup.py index 94d7a11..d9ce238 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name="Tornado-MySQL", - version="0.5.1", + version="0.5.2", url='https://github.com/PyMySQL/Tornado-MySQL', author='INADA Naoki', author_email='songofacandy@gmail.com', diff --git a/tornado_mysql/pools.py b/tornado_mysql/pools.py index bb3e721..5fe5c44 100644 --- a/tornado_mysql/pools.py +++ b/tornado_mysql/pools.py @@ -72,13 +72,19 @@ def _get_conn(self): if self.max_open == 0 or self._opened_conns < self.max_open: self._opened_conns += 1 log.debug("Creating new connection: %s", self.stat()) - return connect(**self.connect_kwargs) + fut = connect(**self.connect_kwargs) + fut.add_done_callback(self._on_connect) # self._opened_conns -=1 on exception + return fut # Wait to other connection is released. fut = Future() self._waitings.append(fut) return fut + def _on_connect(self, fut): + if fut.exception(): + self._opened_conns -= 1 + def _put_conn(self, conn): if (len(self._free_conn) < self.max_idle and self.io_loop.time() - conn.connected_time < self.max_recycle_sec):