diff options
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/debug.c | 4 | ||||
-rw-r--r-- | source3/lib/system.c | 109 |
2 files changed, 4 insertions, 109 deletions
diff --git a/source3/lib/debug.c b/source3/lib/debug.c index 675c2d8cfc..a388956d42 100644 --- a/source3/lib/debug.c +++ b/source3/lib/debug.c @@ -132,6 +132,8 @@ void sig_usr2( int sig ) DEBUG( 0, ( "Got SIGUSR2; set debug level to %d.\n", DEBUGLEVEL ) ); + sys_select_signal(); + #if !defined(HAVE_SIGACTION) CatchSignal( SIGUSR2, SIGNAL_CAST sig_usr2 ); #endif @@ -154,6 +156,8 @@ void sig_usr1( int sig ) DEBUG( 0, ( "Got SIGUSR1; set debug level to %d.\n", DEBUGLEVEL ) ); + sys_select_signal(); + #if !defined(HAVE_SIGACTION) CatchSignal( SIGUSR1, SIGNAL_CAST sig_usr1 ); #endif diff --git a/source3/lib/system.c b/source3/lib/system.c index 46b01b747a..479bce1965 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -39,115 +39,6 @@ extern int DEBUGLEVEL; */ -/******************************************************************* -this replaces the normal select() system call -return if some data has arrived on one of the file descriptors -return -1 means error -********************************************************************/ -#ifndef HAVE_SELECT -static int pollfd(int fd) -{ - int r=0; - -#ifdef HAS_RDCHK - r = rdchk(fd); -#elif defined(TCRDCHK) - (void)ioctl(fd, TCRDCHK, &r); -#else - (void)ioctl(fd, FIONREAD, &r); -#endif - - return(r); -} - -int sys_select(int maxfd, fd_set *fds,struct timeval *tval) -{ - fd_set fds2; - int counter=0; - int found=0; - - FD_ZERO(&fds2); - - while (1) - { - int i; - for (i=0;i<maxfd;i++) { - if (FD_ISSET(i,fds) && pollfd(i)>0) { - found++; - FD_SET(i,&fds2); - } - } - - if (found) { - memcpy((void *)fds,(void *)&fds2,sizeof(fds2)); - return(found); - } - - if (tval && tval->tv_sec < counter) return(0); - sleep(1); - counter++; - } -} - -#else /* !NO_SELECT */ -int sys_select(int maxfd, fd_set *fds,struct timeval *tval) -{ -#ifdef USE_POLL - struct pollfd pfd[256]; - int i; - int maxpoll; - int timeout; - int pollrtn; - - maxpoll = 0; - for( i = 0; i < maxfd; i++) { - if(FD_ISSET(i,fds)) { - struct pollfd *pfdp = &pfd[maxpoll++]; - pfdp->fd = i; - pfdp->events = POLLIN; - pfdp->revents = 0; - } - } - - timeout = (tval != NULL) ? (tval->tv_sec * 1000) + (tval->tv_usec/1000) : - -1; - errno = 0; - pollrtn = poll( &pfd[0], maxpoll, timeout); - - FD_ZERO(fds); - - for( i = 0; i < maxpoll; i++) - if( pfd[i].revents & POLLIN ) - FD_SET(pfd[i].fd,fds); - - return pollrtn; -#else /* USE_POLL */ - - struct timeval t2; - int selrtn; - - if (tval) memcpy((void *)&t2,(void *)tval,sizeof(t2)); - errno = 0; - selrtn = select(maxfd,SELECT_CAST fds,NULL,NULL,tval?&t2:NULL); - - return(selrtn); -} -#endif /* USE_POLL */ -#endif /* NO_SELECT */ - -/******************************************************************* -similar to sys_select() but catch EINTR and continue -this is what sys_select() used to do in Samba -********************************************************************/ -int sys_select_intr(int maxfd, fd_set *fds,struct timeval *tval) -{ - int ret; - do { - ret = sys_select(maxfd, fds, tval); - } while (ret == -1 && errno == EINTR); - return ret; -} - /******************************************************************* A wrapper for usleep in case we don't have one. |