mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Protect against dying twice
Cleanup exit handling
This commit is contained in:
@ -792,27 +792,65 @@ void free_used_memory()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void cleanup_and_exit(int exit_code)
|
||||||
|
{
|
||||||
|
free_used_memory();
|
||||||
|
my_end(MY_CHECK_ERROR);
|
||||||
|
|
||||||
|
if (!silent)
|
||||||
|
{
|
||||||
|
switch (exit_code)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("not ok\n");
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
printf("ok\n");
|
||||||
|
break;
|
||||||
|
case 62:
|
||||||
|
printf("skipped\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("unknown exit code: %d\n", exit_code);
|
||||||
|
DBUG_ASSERT(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(exit_code);
|
||||||
|
}
|
||||||
|
|
||||||
void die(const char *fmt, ...)
|
void die(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
|
static int dying= 0;
|
||||||
va_list args;
|
va_list args;
|
||||||
DBUG_ENTER("die");
|
DBUG_ENTER("die");
|
||||||
DBUG_PRINT("enter", ("start_lineno: %d", start_lineno));
|
DBUG_PRINT("enter", ("start_lineno: %d", start_lineno));
|
||||||
|
|
||||||
|
/*
|
||||||
|
Protect against dying twice
|
||||||
|
first time 'die' is called, try to write log files
|
||||||
|
second time, just exit
|
||||||
|
*/
|
||||||
|
if (dying)
|
||||||
|
cleanup_and_exit(1);
|
||||||
|
|
||||||
/* Print the error message */
|
/* Print the error message */
|
||||||
va_start(args, fmt);
|
fprintf(stderr, "mysqltest: ");
|
||||||
|
if (cur_file && cur_file != file_stack)
|
||||||
|
fprintf(stderr, "In included file \"%s\": ",
|
||||||
|
cur_file->file_name);
|
||||||
|
if (start_lineno > 0)
|
||||||
|
fprintf(stderr, "At line %u: ", start_lineno);
|
||||||
if (fmt)
|
if (fmt)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "mysqltest: ");
|
va_start(args, fmt);
|
||||||
if (cur_file && cur_file != file_stack)
|
|
||||||
fprintf(stderr, "In included file \"%s\": ",
|
|
||||||
cur_file->file_name);
|
|
||||||
if (start_lineno > 0)
|
|
||||||
fprintf(stderr, "At line %u: ", start_lineno);
|
|
||||||
vfprintf(stderr, fmt, args);
|
vfprintf(stderr, fmt, args);
|
||||||
fprintf(stderr, "\n");
|
va_end(args);
|
||||||
fflush(stderr);
|
|
||||||
}
|
}
|
||||||
va_end(args);
|
else
|
||||||
|
fprintf(stderr, "unknown error");
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
/* Dump the result that has been accumulated so far to .log file */
|
/* Dump the result that has been accumulated so far to .log file */
|
||||||
if (result_file_name && ds_res.length)
|
if (result_file_name && ds_res.length)
|
||||||
@ -822,14 +860,7 @@ void die(const char *fmt, ...)
|
|||||||
if (result_file_name && ds_warning_messages.length)
|
if (result_file_name && ds_warning_messages.length)
|
||||||
dump_warning_messages();
|
dump_warning_messages();
|
||||||
|
|
||||||
/* Clean up and exit */
|
cleanup_and_exit(1);
|
||||||
free_used_memory();
|
|
||||||
my_end(MY_CHECK_ERROR);
|
|
||||||
|
|
||||||
if (!silent)
|
|
||||||
printf("not ok\n");
|
|
||||||
|
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -862,14 +893,7 @@ void abort_not_supported_test(const char *fmt, ...)
|
|||||||
}
|
}
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
/* Clean up and exit */
|
cleanup_and_exit(62);
|
||||||
free_used_memory();
|
|
||||||
my_end(MY_CHECK_ERROR);
|
|
||||||
|
|
||||||
if (!silent)
|
|
||||||
printf("skipped\n");
|
|
||||||
|
|
||||||
exit(62);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -6375,14 +6399,9 @@ int main(int argc, char **argv)
|
|||||||
dynstr_free(&ds_res);
|
dynstr_free(&ds_res);
|
||||||
|
|
||||||
timer_output();
|
timer_output();
|
||||||
free_used_memory();
|
|
||||||
my_end(MY_CHECK_ERROR);
|
|
||||||
|
|
||||||
/* Yes, if we got this far the test has suceeded! Sakila smiles */
|
/* Yes, if we got this far the test has suceeded! Sakila smiles */
|
||||||
if (!silent)
|
cleanup_and_exit(0);
|
||||||
printf("ok\n");
|
return 0; /* Keep compiler happy too */
|
||||||
exit(0);
|
|
||||||
return 0; /* Keep compiler happy */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user