Hello,
I have a very strange problem here, which is that I can only
define a limited amount of variables within a multithreaded
program.
Some days ago I described the following problem:
>I want to write a programm which checks if a server is up by
>pinging it. I looks like that:
######################################
main(){
for (every server){ pthread_create(....., startscan(),... ); }
while(1){
sleep(1);
printf("Main Awake again\n");
}
}
startscan(){
ping(server);
printf("Going to sleep\n");
sleep(1);
printf("Awake again!");
}
########################################
>I can see that the servers are getting pinged and that every
>thread goes to sleep. As soon as every thread did it's job and
>the first thread should awake the program get's a SIGSEGV.
>I can't see the message "Awake again" from the first thread but
>I saw that the first thread started to sleep and the last thread
>finished too and the main thread printed "Awake again!".
>Well with my little knowledge of C I would say that there is a
>problem with the sleep function. But as soon as I remove the
>ping() function the programm operates normally and runs forever.
Meanwhile I was able to trace down the problem within the ping()
function. It seems that I'm defining to many variables.
###########################################
int ping(struct in_addr *ipaddress){
int s; /* socket handle for socket()*/
int ident = getpid() & 0xFFFF; /* to ident ICMP message */
int hlen; /* Header length */
struct sockaddr_in *to; /* used to prepare tohost */
struct sockaddr tohost; /* where to send ping - for sendto() */
struct sockaddr fromhost;
struct ip *ip;
struct icmp *icp; /* used to generate icmp message */
struct timeval *timetp; /* temporary time storage structure */
struct timeval actimetp; /* store current time */
u_char outmessage[MAXPACKET]; /* message we send */
u_char inmessage[MAXPACKET]; /* message we receive */
int i,ret;
int mx_dup_ck = 1024;
return(10); /* I removed the ping-routine and replaced it with
* "return(10);" for testing reasons */
}
################################################
Though the program doesn't fail while it is executing ping() (as
described above), I can make the program run fine, by removing
the line "int mx_dup_ck = 1024;". It seems that the programm
reached a kind of maximum number of variables or something
like that. How can I increase this value or how can I solve my
problem? Any ideas?
Steffen
Please reply directly to me because I'm not on the list.
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message