attach to drain event on construction
ensure ended state is consistent to avoid lock-ups