[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/work/icecream-make-it-cool/daemon
From: Dirk Mueller <mueller () kde ! org>
Date: 2006-09-01 8:57:14
Message-ID: 1157101034.475339.26862.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 579548 by mueller:
trying to workaround the busy wait loop
M +18 -16 workit.cpp
--- branches/work/icecream-make-it-cool/daemon/workit.cpp #579547:579548
@@ -261,8 +261,8 @@
assert((flags = fcntl(f, F_GETFD, 0)) < 0 || (flags & FD_CLOEXEC));
}
- ret = execv( argv[0], const_cast<char *const*>( argv ) ); // no return
- printf( "execv failed: %s\n", strerror(errno) );
+ execv( argv[0], const_cast<char *const*>( argv ) ); // no return
+ perror( "ICECC: execv" );
char resultByte = 1;
write(main_sock[1], &resultByte, 1);
@@ -270,6 +270,8 @@
} else {
close( main_sock[1] );
close( sock_in[0] );
+ close( sock_out[1] );
+ close( sock_err[1] );
struct timeval starttv;
gettimeofday(&starttv, 0 );
@@ -318,9 +320,6 @@
msg = 0;
}
close( sock_in[1] );
- close( sock_out[1] );
- close( sock_err[1] );
-
log_block parent_wait("parent, waiting");
// idea borrowed from kprocess
for(;;)
@@ -362,24 +361,19 @@
log_block bfor("for writing loop");
fd_set rfds;
FD_ZERO( &rfds );
- FD_SET( sock_out[0], &rfds );
- FD_SET( sock_err[0], &rfds );
+ if (sock_out[0] >= 0)
+ FD_SET( sock_out[0], &rfds );
+ if (sock_err[0] >= 0)
+ FD_SET( sock_err[0], &rfds );
FD_SET( client_fd, &rfds );
int max_fd = std::max( sock_out[0], sock_err[0] );
if ( client_fd > max_fd )
max_fd = client_fd;
- struct timeval tv;
- /* Wait up to five seconds. */
- tv.tv_sec = 5;
- tv.tv_usec = 0;
+ ret = select( max_fd+1, &rfds, 0, 0, NULL );
+ log_info() << " sel returned " << ret << endl;
- {
- log_block bselect("waiting in select");
- ret = select( max_fd+1, &rfds, 0, 0, &tv );
- }
-
switch( ret )
{
case -1:
@@ -431,6 +425,10 @@
buffer[bytes] = 0;
rmsg.out.append( buffer );
}
+ else if (bytes == 0) {
+ close(sock_out[0]);
+ sock_out[0] = -1;
+ }
}
if ( FD_ISSET(sock_err[0], &rfds) ) {
ssize_t bytes = read( sock_err[0], buffer, sizeof(buffer)-1 );
@@ -438,6 +436,10 @@
buffer[bytes] = 0;
rmsg.err.append( buffer );
}
+ else if (bytes == 0) {
+ close(sock_err[0]);
+ sock_err[0] = -1;
+ }
}
if ( FD_ISSET( client_fd, &rfds ) ) {
rmsg.err.append( "client cancelled\n" );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic