                         if this_query_id?
                             @_client.query_cancel(id:this_query_id)
                         return
-                    if err or resp?.event == 'query_cancel'
+                    if resp?.event == 'query_cancel'
                         @_disconnected("err=#{err}, resp?.event=#{resp?.event}")
                     else
                         # Handle the update


{defaults, required} = misc

cb_fatal = (err, cb) ->
    if not cb?
        return
    if typeof(err) == 'string' and err.slice(0,5) == 'FATAL'
        # throw in an arbitrary pause to wait for proper connection or
        # give the backend time to breath
        setTimeout((->cb(err)), 5000 + Math.random()*5000)

            options : @_options
            cb      : (err, resp) =>
                if err
                    if first_resp and is_fatal(err)
                        cb_fatal(err, cb)
                    else
                        # CRITICAL: any other error means we need to consider this changefeed as
                        # totally broken, and commence starting to reconnect.  There's definitely
                        # no guarantee that whatever connects to us will cleanly disconnect via
                        # a 'query_cancel' mesg.   E.g., if numerous hubs connect to a single project,
                        # and one hub is violently killed, then it does not cancel its changefeeds.
                        # However, the project isn't disconnected due to the other hubs.
                        @_disconnected("err=#{err}")
                        cb?(err)
                    cb = undefined
                    return

