def fix_abicritical(self):
        """
        method to fix crashes/error caused by abinit

        Returns:
            1 if task has been fixed else 0.
        """
        event_handlers = self.event_handlers
        if not event_handlers:
            self.set_status(status=self.S_ERROR, msg='Empty list of event handlers. Cannot fix abi_critical errors')
            return 0

        count, done = 0, len(event_handlers) * [0]

        report = self.get_event_report()
        if report is None:
            self.set_status(status=self.S_ERROR, msg='get_event_report returned None')
            return 0

        # Note we have loop over all possible events (slow, I know)
        # because we can have handlers for Error, Bug or Warning
        # (ideally only for CriticalWarnings but this is not done yet)
        for event in report:
            for i, handler in enumerate(self.event_handlers):

                if handler.can_handle(event) and not done[i]:
                    logger.info("handler %s will try to fix event %s" % (handler, event))
                    try:
                        d = handler.handle_task_event(self, event)
                        if d:
                            done[i] += 1
                            count += 1

                    except Exception as exc:
                        logger.critical(str(exc))

        if count:
            self.reset_from_scratch()
            return 1

        self.set_status(status=self.S_ERROR, msg='We encountered AbiCritical events that could not be fixed')
        return 0