diff --git a/ChangeLog b/ChangeLog index d1aecb00..81fc43a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +1998-07-23 Martin Baulig + + * include/glibtop/procsignal.h (glibtop_proc_signal): + Changed type for `signal', `blocked', `sigignore' and + `sigcatch' to `unsigned long long'. + 1998-07-22 Martin Baulig * include/glibtop/fsusage.h: New file. diff --git a/examples/first.c b/examples/first.c index 33ac2f94..cc62861e 100644 --- a/examples/first.c +++ b/examples/first.c @@ -211,7 +211,7 @@ main (int argc, char *argv []) glibtop_get_proc_signal (&data.proc_signal, pid); printf ("Proc_Signal PID %5u (0x%08lx): " - "%lu %lu %lu %lu\n", pid, data.proc_signal.flags, + "%Lu %Lu %Lu %Lu\n", pid, data.proc_signal.flags, data.proc_signal.signal, data.proc_signal.blocked, data.proc_signal.sigignore, data.proc_signal.sigcatch); @@ -282,7 +282,7 @@ main (int argc, char *argv []) glibtop_get_proc_signal (&data.proc_signal, ppid); printf ("Proc_Signal PPID %5u (0x%08lx): " - "%lu %lu %lu %u\n", ppid, data.proc_signal.flags, + "%Lu %Lu %Lu %Lu\n", ppid, data.proc_signal.flags, data.proc_signal.signal, data.proc_signal.blocked, data.proc_signal.sigignore, data.proc_signal.sigcatch); @@ -353,7 +353,7 @@ main (int argc, char *argv []) glibtop_get_proc_signal (&data.proc_signal, 1); printf ("Proc_Signal INIT %5u (0x%08lx): " - "%lu %lu %lu %lu\n", 1, data.proc_signal.flags, + "%Lu %Lu %Lu %Lu\n", 1, data.proc_signal.flags, data.proc_signal.signal, data.proc_signal.blocked, data.proc_signal.sigignore, data.proc_signal.sigcatch); diff --git a/examples/second.c b/examples/second.c index f36c7ce4..3f618a0e 100644 --- a/examples/second.c +++ b/examples/second.c @@ -110,7 +110,7 @@ main (int argc, char *argv []) glibtop_get_proc_signal (&data.proc_signal, pid); fprintf (stderr, "Proc_Signal PID %5u (0x%08lx): " - "%lu %lu %lu %lu\n", pid, data.proc_signal.flags, + "%Lu %Lu %Lu %Lu\n", pid, data.proc_signal.flags, data.proc_signal.signal, data.proc_signal.blocked, data.proc_signal.sigignore, data.proc_signal.sigcatch); diff --git a/include/glibtop/procsignal.h b/include/glibtop/procsignal.h index 0c760ce3..57373ca0 100644 --- a/include/glibtop/procsignal.h +++ b/include/glibtop/procsignal.h @@ -41,10 +41,10 @@ typedef struct _glibtop_proc_signal glibtop_proc_signal; struct _glibtop_proc_signal { unsigned long flags; - unsigned long signal, /* mask of pending signals */ - blocked, /* mask of blocked signals */ - sigignore, /* mask of ignored signals */ - sigcatch; /* mask of caught signals */ + unsigned long long signal, /* mask of pending signals */ + blocked, /* mask of blocked signals */ + sigignore, /* mask of ignored signals */ + sigcatch; /* mask of caught signals */ }; #define glibtop_get_proc_signal(p1, p2) glibtop_get_proc_signal_l(glibtop_global_server, p1, p2) diff --git a/kernel/table21/module.c b/kernel/table21/module.c index b23fb053..fb095976 100644 --- a/kernel/table21/module.c +++ b/kernel/table21/module.c @@ -41,7 +41,8 @@ EXPORT_NO_SYMBOLS; int init_module(void) { - printk ("init_module () = %p\n", table_fkt); + printk ("init_module () = %p - %d, %d\n", + table_fkt, sizeof (union table), sizeof (sigset_t)); table_function_ptr = table_fkt; return 0; } @@ -68,9 +69,18 @@ static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign, sigemptyset(ign); sigemptyset(catch); +#if 0 + printk ("collect_sigign_sigcatch: %p - %p\n", + p, p->sig); +#endif + if (p->sig) { k = p->sig->action; for (i = 1; i <= _NSIG; ++i, ++k) { +#if 0 + printk ("signal: %d - %p (%p, %p)\n", + i, k->sa.sa_handler, SIG_IGN, SIG_DFL); +#endif if (k->sa.sa_handler == SIG_IGN) sigaddset(ign, i); else if (k->sa.sa_handler != SIG_DFL) @@ -294,6 +304,7 @@ table_fkt (int type, union table *buf, const void *param) union table tbl; struct sysinfo i; struct task_struct *tsk = NULL; + sigset_t sigign, sigcatch; int index, err; pid_t pid; @@ -411,11 +422,27 @@ table_fkt (int type, union table *buf, const void *param) tbl.proc_uid.def_priority = DEF_PRIORITY; break; case TABLE_PROC_SIGNAL: - tbl.proc_signal.signal = tsk->signal; - tbl.proc_signal.blocked = tsk->blocked; - - collect_sigign_sigcatch (tsk, &tbl.proc_signal.ignored, - &tbl.proc_signal.caught); + memcpy (&tbl.proc_signal.signal, &tsk->signal, + sizeof (tbl.proc_signal.signal)); + + memcpy (&tbl.proc_signal.blocked, &tsk->blocked, + sizeof (tbl.proc_signal.blocked)); + + collect_sigign_sigcatch (tsk, &sigign, &sigcatch); + + memcpy (&tbl.proc_signal.ignored, &sigign, + sizeof (tbl.proc_signal.ignored)); + + memcpy (&tbl.proc_signal.caught, &sigcatch, + sizeof (tbl.proc_signal.caught)); + +#if 0 + printk ("PROC_SIGNAL: (%lu, %lu) - (%lu, %lu)\n", + tbl.proc_signal.ignored.sig [0], + tbl.proc_signal.ignored.sig [1], + tbl.proc_signal.caught.sig [0], + tbl.proc_signal.caught.sig [1]); +#endif break; case TABLE_PROC_MEM: if (tsk->mm && tsk->mm != &init_mm) { diff --git a/kernel/table21/table.h b/kernel/table21/table.h index 51aabf62..2b5788d4 100644 --- a/kernel/table21/table.h +++ b/kernel/table21/table.h @@ -129,10 +129,10 @@ struct table_proc_time struct table_proc_signal { - sigset_t signal; - sigset_t blocked; /* bitmap of masked signals */ - sigset_t ignored; /* mask of ignored signals */ - sigset_t caught; /* mask of caught signals */ + unsigned long long signal, + blocked, /* bitmap of masked signals */ + ignored, /* mask of ignored signals */ + caught; /* mask of caught signals */ }; struct table_proc_kernel diff --git a/sysdeps/kernel/procsignal.c b/sysdeps/kernel/procsignal.c index 348933d6..accd6bac 100644 --- a/sysdeps/kernel/procsignal.c +++ b/sysdeps/kernel/procsignal.c @@ -52,8 +52,8 @@ glibtop_get_proc_signal_s (glibtop *server, glibtop_proc_signal *buf, buf->flags = _glibtop_sysdeps_proc_signal; - buf->signal = tbl.proc_signal.signal.__val [0]; - buf->blocked = tbl.proc_signal.blocked.__val [0]; - buf->sigignore = tbl.proc_signal.ignored.__val [0]; - buf->sigcatch = tbl.proc_signal.caught.__val [0]; + buf->signal = tbl.proc_signal.signal; + buf->blocked = tbl.proc_signal.blocked; + buf->sigignore = tbl.proc_signal.ignored; + buf->sigcatch = tbl.proc_signal.caught; }