В Пт, 17/06/2022 в 21:15 +0000, adr пишет:
> On Fri, 17 Jun 2022, [email protected] wrote:
> > Seems like noted() call not needed in user code.
>
> noted() is only needed when using the syscall notify, when using
> atnotify() (or threadnotify) you don't need it, as it is said in
> notify(2) and you did correctly in your first example. threadnotify
> doesn't kill your process if there is no space free in onnote[],
> onnotepid[], the handler is not registered, that's all. alarm()
> should send the note to the process and the first handler registered
> with the note "alarm" should be executed. Your handler checked for
> the note and returned non zero, the process should continue. When
> read is interrupted, it should return an error, the process should
> not be killed. Here is the issue. Comment the read statement and
> there will be the same number of "end"s as "start"s.
>
Мore clear example, which demonstrate crux of the problem:
---------------------------------------------
#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_func(void *)
{
if(threadnotify(handler_alarm, 1) == 0){
fprint(1, "handler not registred\n");
}
alarm(2000);
fprint(1, "start\n");
sleep(10000);
fprint(1, "end\n");
alarm(0);
threadexits(nil);
}
int mainstacksize = 5242880;
void
threadmain(int argc, char *argv[])
{
for(int i = 0; i < 80; i++){
proccreate(proc_func, nil, 10240);
}
sleep(5000);
threadexitsall(nil);
}
---------------------------------------------
cpu% 6.out | grep end | wc -l
33
Problem in unregistered handlers.
> Note that you could register the handler in threadmain and avoid
> completely this issue, but as I said before, something seems wrong
> to me here.
>
I'm don't understand how handler in threadmain would solve the problem.
I need in 'alarm' on per process basis.
Regards,
Andrej
------------------------------------------
9fans: 9fans
Permalink:
https://9fans.topicbox.com/groups/9fans/Tfa6823048ad90a21-M2bf5df4e0184bdff80c9eee9
Delivery options: https://9fans.topicbox.com/groups/9fans/subscription