Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:eeich:BootPrj
xorg-x11
p_bugzilla-117193-luit-sometimes-hangs.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File p_bugzilla-117193-luit-sometimes-hangs.diff of Package xorg-x11
--- xc/programs/luit/luit.c 2004-12-04 18:42:05.000000000 +0100 +++ xc/programs/luit/luit.c 2005-09-28 17:26:35.000000000 +0200 @@ -434,6 +434,16 @@ return 0; } +static void +sigwinchHandler(int sig) { + sigwinch_queued = 1; +} + +static void +sigchldHandler(int sig) +{ + sigchld_queued = 1; +} static int condom(int argc, char **argv) @@ -444,7 +454,8 @@ char *path; char **child_argv; int rc; - + int val; + rc = parseArgs(argc, argv, child_argv0, &path, &child_argv); if(rc < 0) @@ -461,6 +472,34 @@ perror("Couldn't drop priviledges"); exit(1); } + + if(verbose) { + reportIso2022(outputState); + } + +#ifdef SIGWINCH + installHandler(SIGWINCH, sigwinchHandler); +#endif + installHandler(SIGCHLD, sigchldHandler); + + rc = copyTermios(0, pty); + if(rc < 0) + FatalError("Couldn't copy terminal settings\n"); + + rc = setRawTermios(); + if(rc < 0) + FatalError("Couldn't set terminal to raw\n"); + + val = fcntl(0, F_GETFL, 0); + if(val >= 0) { + fcntl(0, F_SETFL, val | O_NONBLOCK); + } + val = fcntl(pty, F_GETFL, 0); + if(val >= 0) { + fcntl(pty, F_SETFL, val | O_NONBLOCK); + } + + setWindowSize(0, pty); pid = fork(); if(pid < 0) { @@ -517,53 +556,13 @@ exit(1); } -static void -sigwinchHandler(int sig) { - sigwinch_queued = 1; -} - -static void -sigchldHandler(int sig) -{ - sigchld_queued = 1; -} - void parent(int pid, int pty) { unsigned char buf[BUFFER_SIZE]; int i; - int val; int rc; - if(verbose) { - reportIso2022(outputState); - } - -#ifdef SIGWINCH - installHandler(SIGWINCH, sigwinchHandler); -#endif - installHandler(SIGCHLD, sigchldHandler); - - rc = copyTermios(0, pty); - if(rc < 0) - FatalError("Couldn't copy terminal settings\n"); - - rc = setRawTermios(); - if(rc < 0) - FatalError("Couldn't set terminal to raw\n"); - - val = fcntl(0, F_GETFL, 0); - if(val >= 0) { - fcntl(0, F_SETFL, val | O_NONBLOCK); - } - val = fcntl(pty, F_GETFL, 0); - if(val >= 0) { - fcntl(pty, F_SETFL, val | O_NONBLOCK); - } - - setWindowSize(0, pty); - for(;;) { rc = waitForInput(0, pty);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor