Skip to content

Commit

Permalink
Only allow poolCreate promise to resolve/reject once
Browse files Browse the repository at this point in the history
  • Loading branch information
dhensby committed Feb 28, 2019
1 parent 557bb70 commit b57fba6
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions lib/tedious.js
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,14 @@ const parameterCorrection = function (value) {
class ConnectionPool extends base.ConnectionPool {
_poolCreate () {
return new base.Promise((resolve, reject) => {
let resolveOnce = (v) => {
resolveOnce = resolveOnce = () => {}
resolve(v)
}
let rejectOnce = (e) => {
resolveOnce = resolveOnce = () => {}
reject(e);
}
const cfg = {
server: this.config.server,
options: Object.assign({
Expand Down Expand Up @@ -233,38 +241,34 @@ class ConnectionPool extends base.ConnectionPool {
payload: true
}
}
let hasPromiseResolved = false
const tedious = new tds.Connection(cfg)
IDS.add(tedious, 'Connection')
debug('pool(%d): connection #%d created', IDS.get(this), IDS.get(tedious))
debug('connection(%d): establishing', IDS.get(tedious))

tedious.once('connect', err => {
hasPromiseResolved = true
if (err) {
err = new base.ConnectionError(err)
return reject(err)
return rejectOnce(err)
}

debug('connection(%d): established', IDS.get(tedious))
resolve(tedious)
resolveOnce(tedious)
})

tedious.on('end', () => {
if (!hasPromiseResolved) {
const err = new base.ConnectionError('The connection ended without ever completing the connection')
reject(err)
}
const err = new base.ConnectionError('The connection ended without ever completing the connection')
rejectOnce(err)
})
tedious.on('error', err => {
if (err.code === 'ESOCKET') {
tedious.hasError = true
reject(err)
rejectOnce(err)
return
}

this.emit('error', err)
reject(err)
rejectOnce(err)
})

if (this.config.debug) {
Expand Down

0 comments on commit b57fba6

Please sign in to comment.