1// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#include "bin/error_exit.h"
6
7#include "bin/eventhandler.h"
8#include "bin/platform.h"
9#include "bin/process.h"
10#include "include/dart_api.h"
11#include "platform/assert.h"
12#include "platform/globals.h"
13#include "platform/syslog.h"
14
15namespace dart {
16namespace bin {
17
18void ErrorExit(int exit_code, const char* format, ...) {
19 va_list arguments;
20 va_start(arguments, format);
21 Syslog::VPrintErr(format, arguments);
22 va_end(arguments);
23
24 Dart_ShutdownIsolate();
25
26 // Terminate process exit-code handler.
27 Process::TerminateExitCodeHandler();
28
29 char* error = Dart_Cleanup();
30 if (error != NULL) {
31 Syslog::PrintErr("VM cleanup failed: %s\n", error);
32 free(error);
33 }
34
35 Process::ClearAllSignalHandlers();
36 EventHandler::Stop();
37 Platform::Exit(exit_code);
38}
39
40} // namespace bin
41} // namespace dart
42