XXX XXX --- proc/Makefile | 5 +++-- proc/main.c | 3 +++ proc/mgt.c | 35 +++++++++++++++++++++++++++++++++++ proc/proc.h | 6 ++++++ 4 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/proc/Makefile b/proc/Makefile index 2eed13c..97d9077 100644 --- a/proc/Makefile +++ b/proc/Makefile @@ -29,9 +29,10 @@ MIGSFLAGS="-DPROCESS_INTRAN=pstruct_t reqport_find (process_t)" \ "-DPROCESS_IMPORTS=import \"proc.h\";" MIGSTUBS = processServer.o notifyServer.o \ - ourmsgUser.o proc_excUser.o proc_excServer.o + ourmsgUser.o proc_excUser.o proc_excServer.o \ + process_notifyUser.o OBJS = $(SRCS:.c=.o) $(MIGSTUBS) -HURDLIBS = ihash ports shouldbeinlibc +HURDLIBS = ihash ports shouldbeinlibc hurdnotify OTHERLIBS = -lpthread include ../Makeconf diff --git a/proc/main.c b/proc/main.c index 73abbc0..f688a44 100644 --- a/proc/main.c +++ b/proc/main.c @@ -80,6 +80,9 @@ main (int argc, char **argv, char **envp) ports_create_port (generic_port_class, proc_bucket, sizeof (struct port_info), &genport); generic_port = ports_get_right (genport); + hurd_notify_create (¬ify_on_process_change, + do_notify_process_changed, + NULL); /* Create the initial proc object for init (PID 1). */ startup_proc = create_startup_proc (); diff --git a/proc/mgt.c b/proc/mgt.c index d7ad296..2d6c8e8 100644 --- a/proc/mgt.c +++ b/proc/mgt.c @@ -219,6 +219,10 @@ S_proc_child (struct proc *parentp, childp->end_code = parentp->end_code; } + /* XXX do the notification here in the mean time. */ + /* Notify any process change listeners. */ + hurd_notify_do_notify (notify_on_process_change, (void *) childp); + return 0; } @@ -697,6 +701,10 @@ new_proc (task_t task) p = allocate_proc (task); if (p) complete_proc (p, genpid ()); + + /* XXX: once the kernel provides the parent task, do the + notification here */ + return p; } @@ -774,6 +782,9 @@ process_has_exited (struct proc *p) /* Cancel any outstanding RPCs done on behalf of the dying process. */ ports_interrupt_rpcs (p); + + /* Notify any process change listeners. */ + hurd_notify_do_notify (notify_on_process_change, (void *) p); } void @@ -942,3 +953,27 @@ S_proc_get_code (struct proc *callerp, return 0; } + +/* XXX */ +error_t +S_proc_request_process_change_notification (struct proc *callerp, + mach_port_t notify) +{ + if (!callerp) + return EOPNOTSUPP; + + return hurd_notify_append (notify_on_process_change, notify, NULL); +} + +error_t +do_notify_process_changed (mach_port_t port, + mach_port_t reply_port, + void *data, + void *common_data) +{ + struct proc *p = common_data; + return notify_process_changed (port, + p->p_pid, + p->p_parent->p_pid, + p->p_dead); +} diff --git a/proc/proc.h b/proc/proc.h index 80f8397..bf9b33b 100644 --- a/proc/proc.h +++ b/proc/proc.h @@ -26,6 +26,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <sys/mman.h> #include <hurd/ports.h> #include <hurd/ihash.h> +#include <hurd/notify.h> #include <pthread.h> struct proc @@ -140,6 +141,7 @@ struct port_bucket *proc_bucket; struct port_class *proc_class; struct port_class *generic_port_class; struct port_class *exc_class; +struct hurd_notify *notify_on_process_change; mach_port_t master_host_port; mach_port_t master_device_port; @@ -213,5 +215,9 @@ void initialize_version_info (void); void send_signal (mach_port_t, int, mach_port_t); +error_t do_notify_process_changed (mach_port_t port, + mach_port_t reply_port, + void *data, + void *common_data); #endif -- 1.7.10.4 -- To UNSUBSCRIBE, email to debian-hurd-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/1379340545-10168-4-git-send-email-4win...@informatik.uni-hamburg.de