1
0
mirror of https://github.com/simh/simh.git synced 2026-03-03 01:58:53 +00:00

SCP: Fix memory debug buffer logic to properly flush and subsequently continue

Flushes happen:
1) when exiting sim_instr()
2) prior to explicitly aborting execution
This commit is contained in:
Mark Pizzolato
2022-07-17 16:58:58 -10:00
parent 7249d55f11
commit 5cbf9df0df
2 changed files with 10 additions and 7 deletions

9
scp.c
View File

@@ -13841,7 +13841,6 @@ int32 saved_quiet = sim_quiet;
int32 saved_sim_switches = sim_switches;
int32 saved_deb_switches = sim_deb_switches;
struct timespec saved_deb_basetime = sim_deb_basetime;
char saved_debug_filename[CBUFSIZE];
if (sim_deb == NULL) /* no debug? */
return SCPE_OK;
@@ -13853,9 +13852,11 @@ if (sim_deb == sim_log) { /* debug is log */
return SCPE_OK;
}
if (!(saved_deb_switches & SWMASK ('B'))) {
strcpy (saved_debug_filename, sim_logfile_name (sim_deb, sim_deb_ref));
if ((saved_deb_switches & SWMASK ('B')) != 0) {
char saved_debug_filename[CBUFSIZE];
snprintf (saved_debug_filename, sizeof (saved_debug_filename), "%u %s",
(uint32)(sim_deb_buffer_size / (1024 * 1024)), sim_logfile_name (sim_deb, sim_deb_ref));
sim_quiet = 1;
sim_set_deboff (0, NULL);
sim_switches = saved_deb_switches;

View File

@@ -2389,10 +2389,11 @@ if (sim_deb_switches & SWMASK ('B')) {
while (sim_debug_buffer_inuse > 0) {
size_t write_size = MIN (sim_deb_buffer_size - offset, sim_debug_buffer_inuse);
size_t written;
fwrite (sim_deb_buffer + offset, 1, write_size, sim_deb);
sim_debug_buffer_inuse -= write_size;
offset += write_size;
written = fwrite (sim_deb_buffer + offset, 1, write_size, sim_deb);
sim_debug_buffer_inuse -= written;
offset += written;
if (offset == sim_deb_buffer_size)
offset = 0;
}
@@ -2403,6 +2404,7 @@ if (sim_deb_switches & SWMASK ('B')) {
sim_close_logfile (&sim_deb_ref);
sim_deb = NULL;
sim_deb_switches = 0;
errno = 0;
return sim_messagef (SCPE_OK, "Debug output disabled\n");
}