rendered paste bodyfor(;;) {
/* diag(SS_MAIN|INFO,"sleeping on select()\n"); */
read_fds=active_fds;
do {
ss=select(1+m,&read_fds,0,0,NULL);
if(ss<0 && errno!=EINTR) diag(SS_MAIN|DIERR,"select() failed");
} while(ss<0);
for(i=0;i<STREAMS;i++) {
if(i==AUDIO_STREAM && config.noaudio) continue;
if(FD_ISSET(fd[i],&read_fds)) {
sock=accept(fd[i],(struct sockaddr *)&name,&a_size);
if(sock<0) {
diag(SS_MAIN|ERR,"accept() for stream #%d (port %d) failed",
i,config.tcp_base_port+i);
continue;
}
diag(SS_MAIN|INFO,"%s:%hd #%d: connection accepted, spawning server.\n",
inet_ntoa(name.sin_addr),ntohs(name.sin_port),i);
if(i==VIDEO_STREAM) {
int cls, launch_result=0;
pthread_mutex_lock(&clients_mtx);
cls=++clients;
diag(SS_MAIN|DEBUG,"%d client(s) connected\n",clients);
//*****************************************//
// Modifica per evitare il lock dei client //
// Massimiliano Vitale 06/07/2004 //
//*****************************************//
// if(!novideo && clients==1) {
if(clients==1) {
sigemptyset(&sigs);
sigaddset(&sigs,SIGHUP);
pthread_sigmask(SIG_BLOCK,&sigs,0);
if((launch_result=pthread_create(&capture_tid,&thr_attr,(void*(*)(void*))capture_thread,(void*)0))!=0) {
if (clients > 0) clients--; //controlla che il numero di clients non scenda al di sotto di zero
}
pthread_sigmask(SIG_UNBLOCK,&sigs,0);
}
pthread_mutex_unlock(&clients_mtx);