summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_time.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2005-12-09 05:43:26 +0000
committerdavidxu <davidxu@FreeBSD.org>2005-12-09 05:43:26 +0000
commit1628e1667744338d6f21842e80f652dd2a45a29f (patch)
tree7d092417a4d81070dd1ec0f13013bc3b5b175ec2 /sys/kern/kern_time.c
parent9c2d0a195dee46f5e5170c1aec049f3ea7491d2d (diff)
downloadFreeBSD-src-1628e1667744338d6f21842e80f652dd2a45a29f.zip
FreeBSD-src-1628e1667744338d6f21842e80f652dd2a45a29f.tar.gz
Register itimers_event_hook as a kernel event handler, so I don't
have to duplicate code to call it in exec() and exit1().
Diffstat (limited to 'sys/kern/kern_time.c')
-rw-r--r--sys/kern/kern_time.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c
index 4cba08f..5bbd2f0 100644
--- a/sys/kern/kern_time.c
+++ b/sys/kern/kern_time.c
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/sysproto.h>
+#include <sys/eventhandler.h>
#include <sys/resourcevar.h>
#include <sys/signalvar.h>
#include <sys/kernel.h>
@@ -86,6 +87,7 @@ static void itimer_enter(struct itimer *);
static void itimer_leave(struct itimer *);
static struct itimer *itimer_find(struct proc *, timer_t, int);
static void itimers_alloc(struct proc *);
+static void itimers_event_hook(void *arg, struct proc *p);
static int realtimer_create(struct itimer *);
static int realtimer_gettime(struct itimer *, struct itimerspec *);
static int realtimer_settime(struct itimer *, int,
@@ -889,6 +891,10 @@ itimer_start(void)
p31b_setcfg(CTL_P1003_1B_TIMERS, 200112L);
p31b_setcfg(CTL_P1003_1B_DELAYTIMER_MAX, INT_MAX);
p31b_setcfg(CTL_P1003_1B_TIMER_MAX, TIMER_MAX);
+ EVENTHANDLER_REGISTER(process_exit, itimers_event_hook,
+ (void *)ITIMER_EV_EXIT, EVENTHANDLER_PRI_ANY);
+ EVENTHANDLER_REGISTER(process_exec, itimers_event_hook,
+ (void *)ITIMER_EV_EXEC, EVENTHANDLER_PRI_ANY);
}
int
@@ -1504,11 +1510,12 @@ itimers_alloc(struct proc *p)
}
/* Clean up timers when some process events are being triggered. */
-void
-itimers_event_hook(struct proc *p, int event)
+static void
+itimers_event_hook(void *arg, struct proc *p)
{
struct itimers *its;
struct itimer *it;
+ int event = (int)arg;
int i;
if (p->p_itimers != NULL) {
OpenPOWER on IntegriCloud