0164957abb
RS CHANGES: - Crash recovery is now implemented like live update. Two instances are kept side by side and the dead version is live updated into the new one. The endpoint doesn't change and the failure is not exposed (by default) to other system services. - The new instance can be created reactively (when a crash is detected) or proactively. In the latter case, RS can be instructed to keep a replica of the system service to perform a hot swap when the service fails. The flag SF_USE_REPL is set in that case. - The new flag SF_USE_REPL is supported for services in the boot image and dynamically started services through the RS interface (i.e. -p option in the service utility). - Fixed a free unallocated memory bug for core system services.
69 lines
1.9 KiB
C
69 lines
1.9 KiB
C
/* This file contains procedures to dump RS data structures.
|
|
*
|
|
* The entry points into this file are
|
|
* rproc_dump: display RS system process table
|
|
*
|
|
* Created:
|
|
* Oct 03, 2005: by Jorrit N. Herder
|
|
*/
|
|
|
|
#include "inc.h"
|
|
#include <timers.h>
|
|
#include <minix/rs.h>
|
|
#include "kernel/priv.h"
|
|
#include "../rs/const.h"
|
|
#include "../rs/type.h"
|
|
|
|
PUBLIC struct rprocpub rprocpub[NR_SYS_PROCS];
|
|
PUBLIC struct rproc rproc[NR_SYS_PROCS];
|
|
|
|
FORWARD _PROTOTYPE( char *s_flags_str, (int flags, int sys_flags) );
|
|
|
|
/*===========================================================================*
|
|
* rproc_dmp *
|
|
*===========================================================================*/
|
|
PUBLIC void rproc_dmp()
|
|
{
|
|
struct rproc *rp;
|
|
struct rprocpub *rpub;
|
|
int i, n=0;
|
|
static int prev_i=0;
|
|
|
|
getsysinfo(RS_PROC_NR, SI_PROCPUB_TAB, rprocpub);
|
|
getsysinfo(RS_PROC_NR, SI_PROC_TAB, rproc);
|
|
|
|
printf("Reincarnation Server (RS) system process table dump\n");
|
|
printf("----label---- endpoint- -pid- flags- -dev- -T- alive_tm starts command\n");
|
|
for (i=prev_i; i<NR_SYS_PROCS; i++) {
|
|
rp = &rproc[i];
|
|
rpub = &rprocpub[i];
|
|
if (! (rp->r_flags & RS_IN_USE)) continue;
|
|
if (++n > 22) break;
|
|
printf("%13s %9d %5d %6s %3d/%1d %3u %8u %5dx %s",
|
|
rpub->label, rpub->endpoint, rp->r_pid,
|
|
s_flags_str(rp->r_flags, rpub->sys_flags), rpub->dev_nr,
|
|
rpub->dev_style, rpub->period, rp->r_alive_tm, rp->r_restarts,
|
|
rp->r_args
|
|
);
|
|
printf("\n");
|
|
}
|
|
if (i >= NR_SYS_PROCS) i = 0;
|
|
else printf("--more--\r");
|
|
prev_i = i;
|
|
}
|
|
|
|
|
|
PRIVATE char *s_flags_str(int flags, int sys_flags)
|
|
{
|
|
static char str[10];
|
|
str[0] = (flags & RS_ACTIVE) ? 'A' : '-';
|
|
str[1] = (flags & RS_UPDATING) ? 'U' : '-';
|
|
str[2] = (flags & RS_EXITING) ? 'E' : '-';
|
|
str[3] = (flags & RS_NOPINGREPLY) ? 'N' : '-';
|
|
str[4] = (sys_flags & SF_USE_COPY) ? 'C' : '-';
|
|
str[5] = (sys_flags & SF_USE_REPL) ? 'R' : '-';
|
|
str[6] = '\0';
|
|
|
|
return(str);
|
|
}
|
|
|