Hi all! Strange behavior of syscall 'read' with signal 'alarm' in followed simple program (ip/port - not matter):
----------------------------------------------------------------------- #include <u.h> #include <libc.h> #include <thread.h> static int handler_alarm(void *, char *msg) { if(strstr(msg, "alarm")) return 1; return 0; } static void proc_udp(void *) { char resp[512]; char req[] = "request"; int fd; threadnotify(handler_alarm, 1); if((fd = dial("udp!185.157.221.201!5678", nil, nil, nil)) >= 0){ if(write(fd, req, strlen(req)) == strlen(req)){ fprint(1, "start\n"); alarm(2000); read(fd, resp, sizeof(resp)); alarm(0); fprint(1, "end\n"); } close(fd); } threadexits(nil); } int mainstacksize = 5242880; void threadmain(int argc, char *argv[]) { for(int i = 0; i < 80; i++){ proccreate(proc_udp, nil, 10240); } sleep(5000); threadexitsall(nil); } ----------------------------------------------------------------------- cpu% 6.out | grep end | wc -l 33 sometimes little more or less but cpu% 6.out | grep start | wc -l 80 always. Testing on Miller's RPi and 9front (amd64 & RPi 2) Why does read() kill process? Why not always? Why number of 'ended' processes arond 33? This is normal behavior? How to fix the program so that the processes do not lost? Can someone point me in the right direction? Thanks! Andrey ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/Tfa6823048ad90a21-M6b9bfae581b00133c66b93c2 Delivery options: https://9fans.topicbox.com/groups/9fans/subscription