X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Ftracecontrol%2Ftracecontrol.c;h=1407aa88bbd4850429f2e356c38af5a51b6b63dd;hb=75e2f3963d4718dd6a629b761966704f6443e597;hp=da4df4fb8b1951644f3977a0b78d0ca23b312d62;hpb=29e34d6c3b4a9fa6fb181647d224efaac2461ffb;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/tracecontrol/tracecontrol.c b/ltt/branches/poly/lttv/modules/gui/tracecontrol/tracecontrol.c index da4df4fb..1407aa88 100644 --- a/ltt/branches/poly/lttv/modules/gui/tracecontrol/tracecontrol.c +++ b/ltt/branches/poly/lttv/modules/gui/tracecontrol/tracecontrol.c @@ -45,6 +45,7 @@ #include #include #include +#include #define MAX_ARGS_LEN PATH_MAX * 10 @@ -434,9 +435,10 @@ static int execute_command(const gchar *command, const gchar *username, /* Read the output from the child terminal before the prompt. If no data in * 200 ms, we stop reading to give the password */ g_info("Reading from child console..."); + sleep(1); /* make sure the child is ready */ while(1) { pollfd.fd = fdpty; - pollfd.events = POLLIN|POLLPRI; + pollfd.events = POLLIN|POLLPRI|POLLERR|POLLHUP|POLLNVAL; num_rdy = poll(&pollfd, 1, 200); #if 0 @@ -494,7 +496,7 @@ static int execute_command(const gchar *command, const gchar *username, while(1) { int num_hup = 0; pollfd.fd = fdpty; - pollfd.events = POLLIN|POLLPRI; + pollfd.events = POLLIN|POLLPRI|POLLERR|POLLHUP|POLLNVAL; num_rdy = poll(&pollfd, 1, -1); #if 0 @@ -536,13 +538,18 @@ wait_child: g_info("Waiting for child exit..."); ret = waitpid(pid, &status, 0); - - if(WIFEXITED(status)) - if(WEXITSTATUS(status) != 0) { - retval = WEXITSTATUS(status); - g_warning("An error occured in the su command : %s", - strerror(retval)); - } + + if(ret == -1) { + g_warning("An error occured in wait : %s", + strerror(errno)); + } else { + if(WIFEXITED(status)) + if(WEXITSTATUS(status) != 0) { + retval = WEXITSTATUS(status); + g_warning("An error occured in the su command : %s", + strerror(retval)); + } + } g_info("Child exited.");