summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/rpc/svc.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/rpc/svc.c')
-rw-r--r--freebsd/sys/rpc/svc.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/freebsd/sys/rpc/svc.c b/freebsd/sys/rpc/svc.c
index cd44b8fd..1f32ad30 100644
--- a/freebsd/sys/rpc/svc.c
+++ b/freebsd/sys/rpc/svc.c
@@ -1,3 +1,5 @@
+#include <machine/rtems-bsd-kernel-space.h>
+
/* $NetBSD: svc.c,v 1.21 2000/07/06 03:10:35 christos Exp $ */
/*-
@@ -1226,6 +1228,11 @@ svc_run_internal(SVCGROUP *grp, bool_t ismaster)
} else if (error != 0) {
KASSERT(error == EINTR || error == ERESTART,
("non-signal error %d", error));
+#ifdef __rtems__
+ mtx_unlock(&grp->sg_lock);
+ svc_exit(pool);
+ mtx_lock(&grp->sg_lock);
+#else /* __rtems__ */
mtx_unlock(&grp->sg_lock);
p = curproc;
PROC_LOCK(p);
@@ -1240,6 +1247,7 @@ svc_run_internal(SVCGROUP *grp, bool_t ismaster)
mtx_lock(&grp->sg_lock);
break;
}
+#endif /* __rtems__ */
}
continue;
}
@@ -1352,16 +1360,25 @@ void
svc_run(SVCPOOL *pool)
{
int g, i;
+#ifndef __rtems__
struct proc *p;
struct thread *td;
+#endif /* __rtems__ */
SVCGROUP *grp;
+#ifndef __rtems__
p = curproc;
td = curthread;
snprintf(td->td_name, sizeof(td->td_name),
"%s: master", pool->sp_name);
+#endif /* __rtems__ */
+
pool->sp_state = SVCPOOL_ACTIVE;
+#ifndef __rtems__
pool->sp_proc = p;
+#else /* __rtems__ */
+ pool->sp_proc = NULL;
+#endif /* __rtems__ */
/* Choose group count based on number of threads and CPUs. */
pool->sp_groupcount = max(1, min(SVC_MAXGROUPS,