def _fire(self, *args, **kwargs):
        """
        Call all handlers.  Any decayed references will be purged.
        """

        delenda = []
        for handler in self._handlers:
            try:
                handler(*args, **self.metadata(kwargs))
            except DeadReferenceError:
                delenda.append(handler)
        self._handlers = self._handlers.difference(set(delenda))