@@ -175,7 +175,7 @@ function sendPacket (client, packet, cb) {
175175  debug ( 'sendPacket :: writing to stream' ) 
176176  const  result  =  mqttPacket . writeToStream ( packet ,  client . stream ,  client . options ) 
177177  debug ( 'sendPacket :: writeToStream result %s' ,  result ) 
178-   if  ( ! result  &&  cb )  { 
178+   if  ( ! result  &&  cb   &&   cb   !==   nop )  { 
179179    debug ( 'sendPacket :: handle events on `drain` once through callback.' ) 
180180    client . stream . once ( 'drain' ,  cb ) 
181181  }  else  if  ( cb )  { 
@@ -190,6 +190,8 @@ function flush (queue) {
190190    Object . keys ( queue ) . forEach ( function  ( messageId )  { 
191191      if  ( typeof  queue [ messageId ] . cb  ===  'function' )  { 
192192        queue [ messageId ] . cb ( new  Error ( 'Connection closed' ) ) 
193+         // This is suspicious.  Why do we only delete this if we have a callbck? 
194+         // If this is by-design, then adding no as callback would cause this to get deleted unintentionally. 
193195        delete  queue [ messageId ] 
194196      } 
195197    } ) 
@@ -569,7 +571,7 @@ MqttClient.prototype._handlePacket = function (packet, done) {
569571
570572MqttClient . prototype . _checkDisconnecting  =  function  ( callback )  { 
571573  if  ( this . disconnecting )  { 
572-     if  ( callback )  { 
574+     if  ( callback   &&   callback   !==   nop )  { 
573575      callback ( new  Error ( 'client disconnecting' ) ) 
574576    }  else  { 
575577      this . emit ( 'error' ,  new  Error ( 'client disconnecting' ) ) 
@@ -1581,7 +1583,7 @@ MqttClient.prototype._handleAck = function (packet) {
15811583  const  that  =  this 
15821584  let  err 
15831585
1584-   if  ( ! cb )  { 
1586+   if  ( ! cb   ||   cb   ===   nop )  { 
15851587    debug ( '_handleAck :: Server sent an ack in error. Ignoring.' ) 
15861588    // Server sent an ack in error, ignore it. 
15871589    return 
0 commit comments