]> xenbits.xensource.com Git - xen.git/commitdiff
libxl: remove waitpid wrapper that's doesn't do anything
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 30 Dec 2009 12:43:57 +0000 (12:43 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 30 Dec 2009 12:43:57 +0000 (12:43 +0000)
if the waitpid callback isn't defined just call normal waitpid

Signed-off-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
tools/libxl/libxl.c
tools/libxl/libxl_exec.c
tools/libxl/libxl_internal.h

index 80beb2c158d1b7e34c687c846d815d1d92c9bd6b..5a8e1556a19098197cbc1de501cf4585486c3296 100644 (file)
@@ -44,8 +44,6 @@ int libxl_ctx_init(struct libxl_ctx *ctx)
 
     ctx->xch = xc_interface_open();
     ctx->xsh = xs_daemon_open();
-
-    ctx->waitpid_instead = libxl_waitpid_instead_default;
     return 0;
 }
 
index 4b085b3025838c459e5fbfd7e96b705304a5fa9f..ba92019e4b7863f802c465eddf16922c970529cf 100644 (file)
@@ -43,6 +43,11 @@ static pid_t libxl_fork(struct libxl_ctx *ctx)
     return pid;
 }
 
+static int call_waitpid(pid_t (*waitpid_cb)(pid_t, int *, int), pid_t pid, int *status, int options)
+{
+    return (waitpid_cb) ? waitpid_cb(pid, status, 0) : waitpid(pid, status, 0);
+}
+
 void libxl_exec(struct libxl_ctx *ctx, int stdinfd, int stdoutfd, int stderrfd,
                 char *arg0, char **args)
      /* call this in the child */
@@ -94,11 +99,6 @@ void libxl_report_child_exitstatus(struct libxl_ctx *ctx,
     }
 }
 
-pid_t libxl_waitpid_instead_default(pid_t pid, int *status, int flags)
-{
-    return waitpid(pid,status,flags);
-}
-
 int libxl_spawn_spawn(struct libxl_ctx *ctx,
                       libxl_device_model_starting *starting,
                       const char *what,
@@ -137,7 +137,7 @@ int libxl_spawn_spawn(struct libxl_ctx *ctx,
 
     if (!for_spawn) _exit(0); /* just detach then */
 
-    got = ctx->waitpid_instead(child, &status, 0);
+    got = call_waitpid(ctx->waitpid_instead, child, &status, 0);
     assert(got == child);
 
     libxl_report_child_exitstatus(ctx, what, child, status);
@@ -178,7 +178,7 @@ int libxl_spawn_detach(struct libxl_ctx *ctx,
                          (unsigned long)for_spawn->intermediate);
             abort(); /* things are very wrong */
         }
-        got = ctx->waitpid_instead(for_spawn->intermediate, &status, 0);
+        got = call_waitpid(ctx->waitpid_instead, for_spawn->intermediate, &status, 0);
         assert(got == for_spawn->intermediate);
         if (!(WIFSIGNALED(status) && WTERMSIG(status) == SIGKILL)) {
             report_spawn_intermediate_status(ctx, for_spawn, status);
@@ -202,7 +202,7 @@ int libxl_spawn_check(struct libxl_ctx *ctx, void *for_spawn_void)
     if (!for_spawn) return 0;
 
     assert(for_spawn->intermediate);
-    got = ctx->waitpid_instead(for_spawn->intermediate, &status, WNOHANG);
+    got = call_waitpid(ctx->waitpid_instead, for_spawn->intermediate, &status, 0);
     if (!got) return 0;
 
     assert(got == for_spawn->intermediate);
index 39eb2dc6c18931e8198137970181a7773821f1ba..3519eacefd2d1c4c7e14f683a2b831c25d010594 100644 (file)
@@ -213,7 +213,6 @@ void libxl_exec(struct libxl_ctx *ctx, int stdinfd, int stdoutfd, int stderrfd,
                 char *arg0, char **args); // logs errors, never returns
 void libxl_log_child_exitstatus(struct libxl_ctx *ctx,
                                 const char *what, pid_t pid, int status);
-pid_t libxl_waitpid_instead_default(pid_t pid, int *status, int flags);
 
 #endif