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

Reply via email to