implemented
* sem_limits.c: implemented
This commit is contained in:
@@ -24,14 +24,28 @@
|
|||||||
#include <glibtop.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/sem_limits.h>
|
#include <glibtop/sem_limits.h>
|
||||||
|
|
||||||
static const unsigned long _glibtop_sysdeps_sem_limits = 0;
|
#include <kvm.h>
|
||||||
|
#include <sys/sem.h>
|
||||||
|
|
||||||
|
static struct nlist nlst[] = { {"seminfo"}, {NULL} };
|
||||||
|
static const unsigned long _glibtop_sysdeps_sem_limits =
|
||||||
|
(1L << GLIBTOP_IPC_SEMMAP) + (1L << GLIBTOP_IPC_SEMMNI) +
|
||||||
|
(1L << GLIBTOP_IPC_SEMMNS) + (1L << GLIBTOP_IPC_SEMMNU) +
|
||||||
|
(1L << GLIBTOP_IPC_SEMMSL) + (1L << GLIBTOP_IPC_SEMOPM) +
|
||||||
|
(1L << GLIBTOP_IPC_SEMUME) + (1L << GLIBTOP_IPC_SEMUSZ) +
|
||||||
|
(1L << GLIBTOP_IPC_SEMVMX) + (1L << GLIBTOP_IPC_SEMAEM);
|
||||||
|
|
||||||
/* Init function. */
|
/* Init function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_init_sem_limits_s (glibtop *server)
|
glibtop_init_sem_limits_s (glibtop *server)
|
||||||
{
|
{
|
||||||
server->sysdeps.sem_limits = _glibtop_sysdeps_sem_limits;
|
kvm_t *kd = server->machine.kd;
|
||||||
|
|
||||||
|
if(kd && !kvm_nlist(kd, nlst))
|
||||||
|
server->sysdeps.sem_limits = _glibtop_sysdeps_sem_limits;
|
||||||
|
else
|
||||||
|
server->sysdeps.sem_limits = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Provides information about sysv sem limits. */
|
/* Provides information about sysv sem limits. */
|
||||||
@@ -39,5 +53,25 @@ glibtop_init_sem_limits_s (glibtop *server)
|
|||||||
void
|
void
|
||||||
glibtop_get_sem_limits_s (glibtop *server, glibtop_sem_limits *buf)
|
glibtop_get_sem_limits_s (glibtop *server, glibtop_sem_limits *buf)
|
||||||
{
|
{
|
||||||
|
kvm_t *kd = server->machine.kd;
|
||||||
|
struct seminfo sinfo;
|
||||||
|
|
||||||
memset (buf, 0, sizeof (glibtop_sem_limits));
|
memset (buf, 0, sizeof (glibtop_sem_limits));
|
||||||
|
|
||||||
|
if(!(server->sysdeps.sem_limits))
|
||||||
|
return;
|
||||||
|
if(kvm_read(kd, nlst[0].n_value, (void *)&sinfo,
|
||||||
|
sizeof(struct seminfo)) != sizeof(struct seminfo))
|
||||||
|
return;
|
||||||
|
buf->semmap = sinfo.semmap;
|
||||||
|
buf->semmni = sinfo.semmni;
|
||||||
|
buf->semmns = sinfo.semmns;
|
||||||
|
buf->semmnu = sinfo.semmnu;
|
||||||
|
buf->semmsl = sinfo.semmsl;
|
||||||
|
buf->semopm = sinfo.semopm;
|
||||||
|
buf->semume = sinfo.semume;
|
||||||
|
buf->semusz = sinfo.semusz;
|
||||||
|
buf->semvmx = sinfo.semvmx;
|
||||||
|
buf->semaem = sinfo.semaem;
|
||||||
|
buf->flags = _glibtop_sysdeps_sem_limits;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user