rem: printf("% 3d   % 5d\n", r, pids[r]);
add: printf("% 3d   % 5d\n", r, pt[r].pid);
context: int main_loop(){	int r, i;	pid_t pid;#ifdef WITH_SNMP_MOD	int (*snmp_start)();	/* initialize snmp module */	snmp_start = (int(*)())find_export("snmp_start", 0);	if(snmp_start)		if(snmp_start() == -1)			LOG(L_ERR, "ERROR: Couldn't start snmp agent\n");#endif			/* one "main" process and n children handling i/o */	if (dont_fork){#ifdef STATS		setstats( 0 );#endif		/* only one address, we ignore all the others */		if (udp_init(&sock_info[0])==-1) goto error;		bind_address=&sock_info[0];		bind_idx=0;		if (sock_no>1){			LOG(L_WARN, "WARNING: using only the first listen address (no fork)\n");		}		/* process_no now initialized to zero -- increase from now on		   as new processes are forked (while skipping 0 reserved for main 		*/		/* we need another process to act as the timer*/		if (timer_list){				process_no++;				if ((pid=fork())<0){					LOG(L_CRIT,  "ERROR: main_loop: Cannot fork\n");					goto error;				}								if (pid==0){					/* child */					/* timer!*/					/* process_bit = 0; */					for(;;){						sleep(TIMER_TICK);						timer_ticker();					}				}else{						pids[process_no]=pid; /*should be shared mem anway*/				}		}		/* if configured to do so, start a server for accepting FIFO commands */		if (open_fifo_server()<0) {			LOG(L_ERR, "opening fifo server failed\n");			goto error;		}		/* main process, receive loop */		pids[0]=getpid();		/* process_bit = 1; */		process_no=0; /*main process number*/				     /* We will call child_init even if we		      * do not fork		      */		if (init_child(0) < 0) {			LOG(L_ERR, "init_child failed\n");			goto error;		}		is_main=1; /* hack 42: call init_child with is_main=0 in case					 some modules wants to fork a child */				return udp_rcv_loop();	}else{		/* process_no now initialized to zero -- increase from now on		   as new processes are forked (while skipping 0 reserved for main ;		   not that with multiple listeners, more children processes will		   share the same process_no and the pids array will be rewritten		*/		for(r=0;r<sock_no;r++){			/* create the listening socket (for each address)*/			if (udp_init(&sock_info[r])==-1) goto error;			/* get first ipv4/ipv6 socket*/			if ((sendipv4==0)&&(sock_info[r].address.af==AF_INET))				sendipv4=&sock_info[r];	#ifdef USE_IPV6			if((sendipv6==0)&&(sock_info[r].address.af==AF_INET6))				sendipv6=&sock_info[r];	#endif			/* all procs should have access to all the sockets (for sending)			 * so we open all first*/		}		for(r=0; r<sock_no;r++){			for(i=0;i<children_no;i++){				process_no++;				if ((pid=fork())<0){					LOG(L_CRIT,  "main_loop: Cannot fork\n");					goto error;				}else if (pid==0){					     /* child */					bind_address=&sock_info[r]; /* shortcut */					bind_idx=r;					if (init_child(i) < 0) {						LOG(L_ERR, "init_child failed\n");						goto error;					}					/* process_bit = 1 << (i+r*children_no); */ /*or process_no-1*/#ifdef STATS					setstats( i+r*children_no );#endif					return udp_rcv_loop();				}else{						pids[process_no]=pid; /*should be in shared mem.*/				}			}			/*parent*/			/*close(udp_sock)*/; /*if it's closed=>sendto invalid fd errors?*/		}	}	/*this is the main process*/	bind_address=&sock_info[0]; /* main proc -> it shoudln't send anything, */	bind_idx=0;					/* if it does it will use the first address */	/* if configured to do so, start a server for accepting FIFO commands */	if (open_fifo_server()<0) {		LOG(L_ERR, "opening fifo server failed\n");		goto error;	}	if (timer_list){		/* fork again for the attendant process*/		process_no++;		if ((pid=fork())<0){			LOG(L_CRIT, "main_loop: cannot fork timer process\n");			goto error;		}else if (pid==0){			/* child */			/* is_main=0; */			for(;;){				/* debug:  instead of doing something usefull */				/* (placeholder for timers, etc.) */				sleep(TIMER_TICK);				/* if we received a signal => TIMER_TICK may have not elapsed*/				timer_ticker();			}		}else{			pids[process_no]=pid;		}	}	/* main */	pids[0]=getpid();	/*DEBUG- remove it*/	printf("\n% 3d processes, % 3d children * % 3d listening addresses + main + fifo %s\n",			process_no+1, children_no, sock_no, (timer_list)?"+ timer":"");	for (r=0; r<=process_no; r++){		printf("% 3d   % 5d\n", r, pids[r]);	}	process_no=0; 	/* process_bit = 0; */	is_main=1;		for(;;){			pause();			handle_sigs();	}			/*return 0; */ error:	return -1;}