I believe threadnotify() should be called from threadmain() to properly register the handler in the rendez group.
On Fri, Jun 17, 2022 at 5:39 AM <andrey100100...@gmail.com> wrote: > > 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-M799a747eed5b007fc4d07fbe Delivery options: https://9fans.topicbox.com/groups/9fans/subscription