summaryrefslogtreecommitdiff
path: root/pfinet/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'pfinet/main.c')
-rw-r--r--pfinet/main.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/pfinet/main.c b/pfinet/main.c
index f364e550..713eddc7 100644
--- a/pfinet/main.c
+++ b/pfinet/main.c
@@ -55,16 +55,24 @@ int
pfinet_demuxer (mach_msg_header_t *inp,
mach_msg_header_t *outp)
{
+ struct port_info *pi;
extern int io_server (mach_msg_header_t *, mach_msg_header_t *);
extern int socket_server (mach_msg_header_t *, mach_msg_header_t *);
extern int startup_notify_server (mach_msg_header_t *, mach_msg_header_t *);
+ /* We have several classes in one bucket, which need to be demuxed
+ differently. */
+ pi = ports_lookup_port(pfinet_bucket, inp->msgh_local_port, socketport_class);
- if (ports_lookup_port(pfinet_bucket, inp->msgh_local_port, socketport_class) != 0)
+ if (pi)
+ {
+ ports_port_deref (pi);
+
return (io_server (inp, outp)
|| socket_server (inp, outp)
|| trivfs_demuxer (inp, outp)
|| startup_notify_server (inp, outp));
+ }
else
return (socket_server (inp, outp)
|| trivfs_demuxer (inp, outp)