Skip to content

Commit d864a78

Browse files
committed
Uh oh, this shouldn't work
1 parent 919a231 commit d864a78

File tree

1 file changed

+24
-23
lines changed

1 file changed

+24
-23
lines changed

src/lib.rs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,30 @@ struct InnerPool<C, E, M, H> where C: Send, E: Send, M: PoolManager<C, E>, H: Er
7676
manager: M,
7777
error_handler: H,
7878
internals: Mutex<PoolInternals<C>>,
79+
task_pool: Mutex<TaskPool>,
80+
}
81+
82+
impl<C, E, M, H> InnerPool<C, E, M, H>
83+
where C: Send, E: Send, M: PoolManager<C, E>, H: ErrorHandler<E> {
84+
fn add_connection(&self) {
85+
let inner = self.clone();
86+
self.task_pool.lock().execute(proc() {
87+
match inner.manager.connect() {
88+
Ok(conn) => {
89+
let mut internals = inner.internals.lock();
90+
internals.conns.push_back(conn);
91+
internals.num_conns += 1;
92+
internals.cond.signal();
93+
}
94+
Err(err) => inner.error_handler.handle_error(err),
95+
}
96+
});
97+
}
7998
}
8099

81100
/// A generic connection pool.
82101
pub struct Pool<C, E, M, H> where C: Send, E: Send, M: PoolManager<C, E>, H: ErrorHandler<E> {
83102
inner: Arc<InnerPool<C, E, M, H>>,
84-
task_pool: Mutex<TaskPool>,
85103
}
86104

87105
impl<C, E, M, H> Pool<C, E, M, H>
@@ -103,18 +121,16 @@ impl<C, E, M, H> Pool<C, E, M, H>
103121
manager: manager,
104122
error_handler: error_handler,
105123
internals: Mutex::new(internals),
106-
});
107-
108-
let pool = Pool {
109-
inner: inner,
110124
task_pool: Mutex::new(TaskPool::new(config.helper_tasks)),
111-
};
125+
});
112126

113127
for _ in range(0, config.pool_size) {
114-
pool.add_connection();
128+
inner.add_connection();
115129
}
116130

117-
Ok(pool)
131+
Ok(Pool {
132+
inner: inner
133+
})
118134
}
119135

120136
/// Retrieves a connection from the pool.
@@ -157,21 +173,6 @@ impl<C, E, M, H> Pool<C, E, M, H>
157173
internals.cond.signal();
158174
}
159175
}
160-
161-
fn add_connection(&self) {
162-
let inner = self.inner.clone();
163-
self.task_pool.lock().execute(proc() {
164-
match inner.manager.connect() {
165-
Ok(conn) => {
166-
let mut internals = inner.internals.lock();
167-
internals.conns.push_back(conn);
168-
internals.num_conns += 1;
169-
internals.cond.signal();
170-
}
171-
Err(err) => inner.error_handler.handle_error(err),
172-
}
173-
});
174-
}
175176
}
176177

177178
/// A smart pointer wrapping a connection.

0 commit comments

Comments
 (0)