From 5c37cb7fbefa79cc79399cfb1da0c3b0c4c6bc9e Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 19 Feb 2011 17:26:06 +0800 Subject: [PATCH] Debugging stdout from child --- src/server/handler_door.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/server/handler_door.c b/src/server/handler_door.c index a15a433..fe8d1d9 100644 --- a/src/server/handler_door.c +++ b/src/server/handler_door.c @@ -44,8 +44,8 @@ volatile int giDoor_ChildStatus; void Door_SIGCHLDHandler(int signum) { signum = 0; - printf("SIGCHLD\n"); giDoor_ChildStatus ++; + printf("SIGCHLD: giDoor_ChildStatus = %i \n", giDoor_ChildStatus); } int Door_InitHandler(void) @@ -127,7 +127,6 @@ int Door_DoDispense(int User, int Item) // Child process if( childPid == 0 ) { - // Close write end of stdin, and set it to #0 close(stdin_pair[1]); dup2(stdin_pair[0], 0); // Close read end of stdout, and set it to #1 @@ -142,11 +141,20 @@ int Door_DoDispense(int User, int Item) close(stdin_pair[0]); // child stdin read close(stdout_pair[1]); // child stdout write - if( giDoor_ChildStatus || read(stdout_pair[0], buf, 512) < 0) { + { + int len; + if( giDoor_ChildStatus || (len = read(stdout_pair[0], buf, 512)) < 0) + { + #if DEBUG + printf("Door_DoDispense: fread fail\n"); + #endif + return -1; + } + buf[len] = '\0'; + #if DEBUG - printf("Door_DoDispense: fread fail\n"); + printf("Door_DoDispense: buf = %i '%s'\n", len, buf); #endif - return -1; } // Send password @@ -195,6 +203,8 @@ int Door_DoDispense(int User, int Item) printf("Door_DoDispense: User %i opened door\n", User); #endif + kill(childPid, SIGKILL); + return 0; } -- 2.20.1