X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fprocess.c;h=9fe742c0e9f290f39c1a811df8912825a3c3c7e8;hb=8aee94b6ea4fe91d4120803c0d7ec0635bdd83bd;hp=3d6c11ae2018079d00096978d2b3b97df6b3b5a6;hpb=691ac3d8c5f892b8d423c8855d55fecf24abd1ae;p=sliver-openvswitch.git diff --git a/lib/process.c b/lib/process.c index 3d6c11ae2..9fe742c0e 100644 --- a/lib/process.c +++ b/lib/process.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ #include #include "process.h" -#include #include #include #include @@ -82,9 +81,7 @@ process_init(void) inited = true; /* Create notification pipe. */ - xpipe(fds); - set_nonblocking(fds[0]); - set_nonblocking(fds[1]); + xpipe_nonblocking(fds); /* Set up child termination signal handler. */ memset(&sa, 0, sizeof sa); @@ -161,7 +158,7 @@ process_register(const char *name, pid_t pid) struct process *p; const char *slash; - assert(sigchld_is_blocked()); + ovs_assert(sigchld_is_blocked()); p = xzalloc(sizeof *p); p->pid = pid; @@ -310,7 +307,7 @@ process_exited(struct process *p) int process_status(const struct process *p) { - assert(p->exited); + ovs_assert(p->exited); return p->status; } @@ -411,14 +408,20 @@ struct stream { static int stream_open(struct stream *s, size_t max_size) { + int error; + s->max_size = max_size; ds_init(&s->log); if (pipe(s->fds)) { VLOG_WARN("failed to create pipe: %s", strerror(errno)); return errno; } - set_nonblocking(s->fds[0]); - return 0; + error = set_nonblocking(s->fds[0]); + if (error) { + close(s->fds[0]); + close(s->fds[1]); + } + return error; } static void @@ -637,7 +640,7 @@ sigchld_is_blocked(void) { sigset_t sigs; - xsigprocmask(SIG_SETMASK, NULL, &sigs); + xpthread_sigmask(SIG_SETMASK, NULL, &sigs); return sigismember(&sigs, SIGCHLD); } @@ -648,11 +651,11 @@ block_sigchld(sigset_t *oldsigs) sigemptyset(&sigchld); sigaddset(&sigchld, SIGCHLD); - xsigprocmask(SIG_BLOCK, &sigchld, oldsigs); + xpthread_sigmask(SIG_BLOCK, &sigchld, oldsigs); } static void unblock_sigchld(const sigset_t *oldsigs) { - xsigprocmask(SIG_SETMASK, oldsigs, NULL); + xpthread_sigmask(SIG_SETMASK, oldsigs, NULL); }