Thanks to Douglas Adams, I think '42' might be a more obvious magic number for a clue:
% 8c udpflood.c && 8l -o udpflood udpflood.8 && ./udpflood | grep end | wc -l 42 % grep 42 /sys/src/libthread/note.c #define NFN 42 On Fri, Jun 17, 2022 at 9:11 AM Skip Tavakkolian <skip.tavakkol...@gmail.com> wrote: > > it's worth grepping for persistent magic constants: > > % grep 33 /sys/src/libthread/*.[ch] > /sys/src/libthread/note.c:#define NFN 33 > > On Fri, Jun 17, 2022 at 9:08 AM Skip Tavakkolian > <skip.tavakkol...@gmail.com> wrote: > > > > interesting catch. it seems to be a tunable limit. > > > > % grep NFN /sys/src/libthread/note.c > > #define NFN 33 > > static int (*onnote[NFN])(void*, char*); > > static int onnotepid[NFN]; > > for(i=0; i<NFN; i++) > > return i<NFN; > > for(i=0; i<NFN; i++){ > > if(i==NFN){ > > > > On Fri, Jun 17, 2022 at 8:08 AM <andrey100100...@gmail.com> wrote: > > > > > > В Пт, 17/06/2022 в 08:11 -0600, Jacob Moody пишет: > > > > On 6/17/22 07:46, Thaddeus Woskowiak wrote: > > > > > I believe threadnotify() should be called from threadmain() to > > > > > properly register the handler in the rendez group > > > > > > > > This is incorrect, according to thread(2): > > > > > > > > "The thread library depends on all procs > > > > being in the same rendezvous group" > > > > > > > > > From sleep(2): > > > > > > Alarm causes an alarm note (see notify(2)) to be sent to the > > > invoking process after the number of milliseconds given by > > > the argument. > > > > > > Mean to be sent only to the invoking process, NOT to the process group. > > > > > > > > > > > The issue here is that your note handler has to call noted, > > > > you are returning from the handler without actually resuming the > > > > program. > > > > You either need to call noted(NCONT) to resume execution or > > > > noted(NDFLT) > > > > to stop execution. > > > > > > > > An excerpt from notify(2): > > > > > > > > "A notification handler must finish either by exiting the > > > > program or by calling noted; if the handler returns the > > > > behavior is undefined and probably erroneous." > > > > > > > > So you are indeed observing undefined behavior. > > > > > > > > > > With: > > > > > > ------------------------------------ > > > static int > > > handler_alarm(void *, char *msg) > > > { > > > if(strstr(msg, "alarm")){ > > > noted(NCONT); > > > return 1; > > > } > > > > > > return 0; > > > } > > > ------------------------------------ > > > > > > result the same: > > > > > > cpu% 6.out | grep end | wc -l > > > 33 > > > > > > > > > And noted(NCONT) may be needed, when process recieved many (2 and more) > > > notes at once. > > > > > > May be something wrong with interrupted an incomplete system call? > > > > > > > > > > > > > > Hope this helps, > > > > moody > > > > > > > > > > > > > Regards, > > > Andrej > > > ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/Tfa6823048ad90a21-M5b827bf9eba38f893c1f67bb Delivery options: https://9fans.topicbox.com/groups/9fans/subscription