From 99acb3fb113a739fe65a3593d86dabaf9d676b67 Mon Sep 17 00:00:00 2001 From: rpj Date: Fri, 24 Jul 1998 09:45:04 +0000 Subject: Fri Jul 24 16:33:17 1998 Ross Johnson * fork.c (pthread_atfork): Add all the necessary push calls. Local implementation semantics: If we get an ENOMEM at any time then ALL handlers (including those from previous pthread_atfork() calls) will be popped off each of the three atfork stacks before we return. (fork): Add all the necessary pop calls. Add the thread cancellation and join calls to the child fork. Add #includes. * implement.h: (_pthread_handler_push): Fix return type and stack arg type in prototype. (_pthread_handler_pop): Fix stack arg type in prototype. (_pthread_handler_pop_all): Fix stack arg type in prototype. * cleanup.c (_pthread_handler_push): Change return type to int and return ENOMEM if malloc() fails. --- cleanup.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'cleanup.c') diff --git a/cleanup.c b/cleanup.c index 168b75f..9bf4a68 100644 --- a/cleanup.c +++ b/cleanup.c @@ -9,7 +9,7 @@ #include "pthread.h" #include "implement.h" -void +int _pthread_handler_push(int stack, int poporder, void (*routine)(void *), @@ -27,7 +27,7 @@ _pthread_handler_push(int stack, if (new == NULL) { - /* FIXME: INTERNAL ERROR */ + return ENOMEM; } new->routine = routine; @@ -60,6 +60,7 @@ _pthread_handler_push(int stack, next = new; } } + return 0; } void -- cgit v1.2.3