Browse Source

startup: fix bugs in cleanup upon errors during startup

Importantly adapter cleanup will now happen upon startup failure.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
tags/v0.5.0-rc1
Øyvind Harboe 13 years ago
parent
commit
1b9e80f7e6
1 changed files with 33 additions and 26 deletions
  1. +33
    -26
      src/openocd.c

+ 33
- 26
src/openocd.c View File

@@ -301,31 +301,10 @@ struct command_context *setup_command_handler(Jim_Interp *interp)
return cmd_ctx;
}

/* normally this is the main() function entry, but if OpenOCD is linked
* into application, then this fn will not be invoked, but rather that
* application will have it's own implementation of main(). */
int openocd_main(int argc, char *argv[])
static int main2(int argc, char *argv[], struct command_context *cmd_ctx)
{
int ret;

/* initialize commandline interface */
struct command_context *cmd_ctx;

cmd_ctx = setup_command_handler(NULL);

if (util_init(cmd_ctx) != ERROR_OK)
return EXIT_FAILURE;

if (ioutil_init(cmd_ctx) != ERROR_OK)
return EXIT_FAILURE;

LOG_OUTPUT("For bug reports, read\n\t"
"http://openocd.berlios.de/doc/doxygen/bugs.html"
"\n");

command_context_mode(cmd_ctx, COMMAND_CONFIG);
command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);

if (parse_cmdline_args(cmd_ctx, argc, argv) != ERROR_OK)
return EXIT_FAILURE;

@@ -348,15 +327,43 @@ int openocd_main(int argc, char *argv[])
{
ret = command_run_line(cmd_ctx, "init");
if (ERROR_OK != ret)
ret = EXIT_FAILURE;
return EXIT_FAILURE;
}

/* handle network connections */
if (ERROR_OK == ret)
server_loop(cmd_ctx);
server_loop(cmd_ctx);

server_quit();

return ret;
}

/* normally this is the main() function entry, but if OpenOCD is linked
* into application, then this fn will not be invoked, but rather that
* application will have it's own implementation of main(). */
int openocd_main(int argc, char *argv[])
{
int ret;

/* initialize commandline interface */
struct command_context *cmd_ctx;

cmd_ctx = setup_command_handler(NULL);

if (util_init(cmd_ctx) != ERROR_OK)
return EXIT_FAILURE;

if (ioutil_init(cmd_ctx) != ERROR_OK)
return EXIT_FAILURE;

LOG_OUTPUT("For bug reports, read\n\t"
"http://openocd.berlios.de/doc/doxygen/bugs.html"
"\n");

command_context_mode(cmd_ctx, COMMAND_CONFIG);
command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);

ret = main2(argc, argv, cmd_ctx);

unregister_all_commands(cmd_ctx, NULL);

/* free commandline interface */


Loading…
Cancel
Save