<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Hello Albert,<br>
<div class="moz-signature"><br>
1. Well, I understand the credit to NW.js. Thanks to their
developers.<br>
But without Head Chefs putting in music all the good ingredients,
Purr Data can't get better!<br>
<br>
2. Since NW.js v.0.28.1 was introduced, it looks like I'm getting
in EditMode much less random freezes and for the time being no
complete freeze at all!<br>
<br>
Best, Joseph<br>
- - - - - - - - - - - - - - - - - - - -<br>
<br>
</div>
<div class="moz-cite-prefix">Le 24/10/2020 à 20:01, Albert Graef a
écrit :<br>
</div>
<blockquote type="cite"
cite="mid:CA+rUic2zvi0ihC19e2+CQLm6rVbr=B-vz=OuP2uoj41bv6YvXg@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div>Hi Joseph,</div>
<div><br>
</div>
<div>I'm glad that you like it, I also think that it's a big
improvement. But of course the credit goes to the nw.js (or
Chromium) developers. The dialog is just what's readily
provided in nw.js now, so that part was easy. I only had to
find a way to work around the crash in the engine that it
caused. ;-)<br>
</div>
<div><br>
</div>
<div>Albert</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Sat, Oct 24, 2020 at 4:49
PM Linux ROUEN Normandie <<a
href="mailto:linux.rouen@free.fr" moz-do-not-send="true">linux.rouen@free.fr</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div> Dear Albert,<br>
<div><br>
Downloaded your OBS 20.04 package and updated like a charm
(as always) my Purr Data on Linux Mint 20 in just 2
minutes and...<br>
Wow! That's beautiful! your NEW Print... function is more
than Wonderful!<br>
Everything is there and it would please everyone.<br>
<h2>(。♥‿♥。)</h2>
Thanks a lot for your great job!<br>
Joseph<br>
- - - - - -<br>
</div>
<div><br>
Le 24/10/2020 à 15:28, Albert Graef a écrit :<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Sat, Oct 24, 2020
at 2:59 PM Albert Graef <<a
href="mailto:aggraef@gmail.com" target="_blank"
moz-do-not-send="true">aggraef@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px
0px 0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Mac and Windows are looking good as
well, so I've thrown it up on the OBS preview
channel at <a
href="https://build.opensuse.org/package/show/home:aggraef:purr-data-git/purr-data"
target="_blank" moz-do-not-send="true">https://build.opensuse.org/package/show/home:aggraef:purr-data-git/purr-data</a>.</div>
</blockquote>
<div><br>
</div>
<div>Done, the 20.04 package is here: <a
href="https://download.opensuse.org/repositories/home:/aggraef:/purr-data-git/xUbuntu_20.04/amd64/purr-data_2.15.2+git4742+c3462eac-1_amd64.deb"
target="_blank" moz-do-not-send="true">https://download.opensuse.org/repositories/home:/aggraef:/purr-data-git/xUbuntu_20.04/amd64/purr-data_2.15.2+git4742+c3462eac-1_amd64.deb</a></div>
<div><br>
</div>
<div>Albert<br>
</div>
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px
0px 0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="ltr"> It would be nice if you could give
it a whirl when the build is finished and tell me
how you like it. (As usual, you can download the
20.04 package at <a
href="https://download.opensuse.org/repositories/home:/aggraef:/purr-data-git/xUbuntu_20.04/"
target="_blank" moz-do-not-send="true">https://download.opensuse.org/repositories/home:/aggraef:/purr-data-git/xUbuntu_20.04/</a>
once the build finishes. The revision will be
2.15.2+git4742+c3462eac.)
<div><br>
</div>
<div>Jonathan, the MR is now up at <a
href="https://git.purrdata.net/jwilkes/purr-data/-/merge_requests/595"
target="_blank" moz-do-not-send="true">https://git.purrdata.net/jwilkes/purr-data/-/merge_requests/595</a>.
(It would be nice if you could take a look at
the CI, it seems broken again.)</div>
<div><br>
</div>
<div>Albert</div>
<div><br>
</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Sat, Oct 24,
2020 at 12:56 PM Linux ROUEN Normandie <<a
href="mailto:linux.rouen@free.fr"
target="_blank" moz-do-not-send="true">linux.rouen@free.fr</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px
0px 0px 0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<h1>♥‿♥</h1>
<div>Joseph<br>
- - - - - - - - - - - - - - - - - - - -<br>
</div>
<div>Le 24/10/2020 à 12:46, Albert Graef a
écrit :<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On
Sat, Oct 24, 2020 at 3:32 AM Jonathan
Wilkes <<a
href="mailto:jon.w.wilkes@gmail.com"
target="_blank"
moz-do-not-send="true">jon.w.wilkes@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">What
I'm talking about is the backend-- the
audio engine and message<br>
dispatcher-- taking 2 or 3 minutes to
process some data. I believe<br>
Joseph even hit this bug with the
exponential list-walking explosion<br>
when he was trying to drag a large
selection of objects.<br>
<br>
In those cases, pd-watchdog just keeps
printing out messages until the<br>
backend finishes whatever brute-force
task it was working on.<br>
Pd-watchdog will never bail in those
cases.<br>
</blockquote>
<div><br>
</div>
<div>Right, that's funny. But the real
issue is obviously somewhere in the
engine's idle processing, I'd say. As
long as the *engine* is busy, it just
won't listen to those SIGHUPs, so the
watchdog just keeps sending those and
printing the "signaling pd" messages
along with it.</div>
<div><br>
</div>
<div> But if the *GUI* is busy, the
engine keeps chugging along doing its
usual idle processing, which
apparently involves reading some
sockets via the recv() call. I have no
idea where and why exactly that
happens, but apparently that recv()
call *will* listen to the SIGHUP, and
be upset enough about it that it
crashes the process, because the
SIGHUP isn't handled anywhere. The gdb
backtrace seems to indicate that the
select() call in sys_domicrosleep() is
the culprit, but I suspect that it's
actually related to the audio backend
in some way, because this crash does
or doesn't happen depending on which
audio backend is being used. (That
discrepancy might also be due to the
part of Jack which runs in the client
taking care of masking those SIGHUPs,
but I can't find anything in the audio
backend code of Pd itself which
explains the differences between
backends there.)<br>
</div>
<div><br>
</div>
<div>Anyway, I was able to solve this by
just adding a global method which can
be used by the GUI to mark sections
when it is busy, during which the
engine just keeps the watchdog happy
by itself as if running GUI-less. I
added those calls to the new print
dialog as well as the message
operation and the make_index() call
which constructs the help index when
bringing up the help browser. I
*think* that this should cover all
cases where this crash may happen.</div>
<div><br>
</div>
<div> I already tested that on Linux,
now testing on Mac and Windows to make
sure that the new mechanism doesn't
break anything there, so expect a
merge request soon. (I also left the
sys_domicrosleep() backport from
vanilla in there, because I think that
it's good to have those fixes as well,
even though they didn't help with the
issue at hand.)</div>
<div><br>
</div>
<div>Albert<br>
</div>
<div> <br>
</div>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex"> <br>
><br>
>> Also, given various use cases
with long-running number cruncher<br>
>> patches, watchdog *cannot*
bail in any of those cases without
solving<br>
>> the halting problem.<br>
><br>
><br>
> It doesn't try to solve the
halting problem. It's a very dumb
little routine which just loops
waiting for its socket to dry up. ;-)<br>
><br>
> I guess that the watchdog is just
fine as long as the gui is still alive
and kicking, no matter what the engine
does.<br>
<br>
Hm... I'm stumped then. Because I know
for one of the problems Joseph<br>
reported, the backend is stuck walking
lists in a blocking call that<br>
will keep chugging away for minutes
before letting the gui routine do<br>
any socket business. I don't know why
this wouldn't cause pd-watchdog<br>
to bail, yet a few seconds of a
javascript blocking call would.<br>
<br>
><br>
> About realtime priorities: Yes,
there have been improvements in the
API, but Pd doesn't use them AFAICT.<br>
><br>
>> So I'm just not sure what its
purpose is.<br>
><br>
><br>
> I guess that it's a left-over
from the bad old days when we all had
single core computers. At that time it
was fairly easy to completely lock up
the system with a runaway realtime
process. Nowadays, this has become
much harder, usually you can still
kill that process.<br>
<br>
Ah, right.<br>
<br>
-Jonathan<br>
<br>
><br>
> Albert<br>
><br>
>><br>
>> -Jonathan<br>
>><br>
>> On Fri, Oct 23, 2020 at 5:20
PM Jonathan Wilkes <<a
href="mailto:jon.w.wilkes@gmail.com"
target="_blank"
moz-do-not-send="true">jon.w.wilkes@gmail.com</a>>
wrote:<br>
>> ><br>
>> > On Fri, Oct 23, 2020 at
4:55 PM Albert Graef <<a
href="mailto:aggraef@gmail.com"
target="_blank"
moz-do-not-send="true">aggraef@gmail.com</a>>
wrote:<br>
>> > ><br>
>> > > On Fri, Oct 23,
2020 at 10:03 PM Jonathan Wilkes <<a
href="mailto:jon.w.wilkes@gmail.com"
target="_blank"
moz-do-not-send="true">jon.w.wilkes@gmail.com</a>>
wrote:<br>
>> > >><br>
>> > >> > I see that
there are some fairly recent code
changes in sys_domicrosleep() in
vanilla, though. I'll port those and
see whether that helps.<br>
>> > >><br>
>> > >> I don't think
they will help.<br>
>> > ><br>
>> > ><br>
>> > > You're right,
backporting those didn't help.<br>
>> > ><br>
>> > >> The problem is
that if pd-watchdog<br>
>> > >> doesn't receive
an acknowledgement it will shut down
the backend.<br>
>> > ><br>
>> > ><br>
>> > > Yep, that's it. If
I modify the watchdog so that it never
bails out then both the message and
the print dialog work alright. Of
course that's not the proper solution
;-), but it proves that the watchdog
is the culprit here. So we just have
to find a way to keep it happy, see
below.<br>
>> ><br>
>> > I'm curious-- is there
any extant user report of watchdog
saving them<br>
>> > from having to hard
reboot their machine (which is what I
guess is<br>
>> > what it's there for)?<br>
>> ><br>
>> > The thing is, this is
the first case I've heard of where the
GUI has<br>
>> > caused a hangup. And
it's a false positive because the
blocking call<br>
>> > was triggered by the
user purposely and is temporary.<br>
>> ><br>
>> > On the other hand, I've
seen my backend lock down the CPU *all
the<br>
>> > time*. Exponential
explosion is the name of the game all
through<br>
>> > g_editor.c, and there
are various other freezes from
external libs and<br>
>> > bugs. I have *never*
seen watchdog bail in that case-- it
just keeps<br>
>> > spitting out "watchdog:
signaling pd..." until I ctrl-c out of
the<br>
>> > terminal.<br>
>> ><br>
>> > Also-- hasn't Linux
realtime priority processing improved<br>
>> > significantly over the
past decade to make it less likely to
lock up<br>
>> > the machine? (I've only
heard in general about improvements,
so I'm<br>
>> > not sure about this.)<br>
>> ><br>
>> > ><br>
>> > >> We can change
the "message" dialog to something that
doesn't block the<br>
>> > >> js engine. I'm
not sure about the print dialog,
though.<br>
>> > ><br>
>> > ><br>
>> > > Probably not much
that we can do about the print dialog.
And there might be other cases where
things may go awry. Search index
generation comes to mind -- we might
just have been lucky there because
this is a very quick operation on
Linux, but it might give the same
issue on slower computers.<br>
>> > ><br>
>> > > This really calls
for a general solution where the gui
informs the engine that it should keep
the watchdog happy while it's
executing a callback which may run for
a while, and then inform it again when
that callback is finished. That
shouldn't be too hard to do, the
engine already does this anyway when
running gui-less. I'm working on it.<br>
>> ><br>
>> > I'm curious what happens
if we get rid of watchdog and run Purr
Data<br>
>> > with realtime priorities
on a current distro... :)<br>
>> ><br>
>> > -Jonathan<br>
>> ><br>
>> > ><br>
>> > > Albert<br>
>> > ><br>
>> > ><br>
>> > >><br>
>> > >> -Jonathan<br>
>> > >><br>
>> > >> ><br>
>> > >> > Albert<br>
>> > >> ><br>
>> > >> >><br>
>> > >> >>
-Jonathan<br>
>> > >> >>
_______________________________________________<br>
>> > >> >>
L2Ork-dev mailing list<br>
>> > >> >> <a
href="mailto:L2Ork-dev@disis.music.vt.edu"
target="_blank"
moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
>> > >> >> <a
href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a><br>
>> > >> ><br>
>> > >> ><br>
>> > >> ><br>
>> > >> > --<br>
>> > >> > Dr. Albert
Gr"af<br>
>> > >> > Computer
Music Research Group, JGU Mainz,
Germany<br>
>> > >> > Email: <a
href="mailto:aggraef@gmail.com"
target="_blank"
moz-do-not-send="true">aggraef@gmail.com</a>,
web: <a
href="https://agraef.github.io/"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://agraef.github.io/</a><br>
>> > >> >
_______________________________________________<br>
>> > >> > L2Ork-dev
mailing list<br>
>> > >> > <a
href="mailto:L2Ork-dev@disis.music.vt.edu"
target="_blank"
moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
>> > >> > <a
href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a><br>
>> > >>
_______________________________________________<br>
>> > >> L2Ork-dev
mailing list<br>
>> > >> <a
href="mailto:L2Ork-dev@disis.music.vt.edu"
target="_blank"
moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
>> > >> <a
href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a><br>
>> > ><br>
>> > ><br>
>> > ><br>
>> > > --<br>
>> > > Dr. Albert Gr"af<br>
>> > > Computer Music
Research Group, JGU Mainz, Germany<br>
>> > > Email: <a
href="mailto:aggraef@gmail.com"
target="_blank"
moz-do-not-send="true">aggraef@gmail.com</a>,
web: <a
href="https://agraef.github.io/"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://agraef.github.io/</a><br>
>> > >
_______________________________________________<br>
>> > > L2Ork-dev mailing
list<br>
>> > > <a
href="mailto:L2Ork-dev@disis.music.vt.edu"
target="_blank"
moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
>> > > <a
href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a><br>
>>
_______________________________________________<br>
>> L2Ork-dev mailing list<br>
>> <a
href="mailto:L2Ork-dev@disis.music.vt.edu"
target="_blank"
moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
>> <a
href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a><br>
><br>
><br>
><br>
> --<br>
> Dr. Albert Gr"af<br>
> Computer Music Research Group,
JGU Mainz, Germany<br>
> Email: <a
href="mailto:aggraef@gmail.com"
target="_blank"
moz-do-not-send="true">aggraef@gmail.com</a>,
web: <a
href="https://agraef.github.io/"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://agraef.github.io/</a><br>
>
_______________________________________________<br>
> L2Ork-dev mailing list<br>
> <a
href="mailto:L2Ork-dev@disis.music.vt.edu"
target="_blank"
moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
> <a
href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a><br>
_______________________________________________<br>
L2Ork-dev mailing list<br>
<a
href="mailto:L2Ork-dev@disis.music.vt.edu"
target="_blank"
moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
<a
href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a></blockquote>
</div>
<br clear="all">
<br>
-- <br>
<div dir="ltr">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">Dr. Albert Gr"af<br>
Computer Music Research Group,
JGU Mainz, Germany<br>
Email: <a
href="mailto:aggraef@gmail.com"
target="_blank"
moz-do-not-send="true">aggraef@gmail.com</a>,
web: <a
href="https://agraef.github.io/"
target="_blank"
moz-do-not-send="true">https://agraef.github.io/</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
<fieldset></fieldset>
<pre>_______________________________________________
L2Ork-dev mailing list
<a href="mailto:L2Ork-dev@disis.music.vt.edu" target="_blank" moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a>
<a href="https://disis.music.vt.edu/listinfo/l2ork-dev" target="_blank" moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a></pre>
</blockquote>
<br>
</div>
_______________________________________________<br>
L2Ork-dev mailing list<br>
<a href="mailto:L2Ork-dev@disis.music.vt.edu"
target="_blank" moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
<a
href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a></blockquote>
</div>
<br clear="all">
<br>
-- <br>
<div dir="ltr">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">Dr. Albert Gr"af<br>
Computer Music Research Group, JGU
Mainz, Germany<br>
Email: <a
href="mailto:aggraef@gmail.com"
target="_blank" moz-do-not-send="true">aggraef@gmail.com</a>,
web: <a
href="https://agraef.github.io/"
target="_blank" moz-do-not-send="true">https://agraef.github.io/</a></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<br>
-- <br>
<div dir="ltr">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">Dr. Albert Gr"af<br>
Computer Music Research Group, JGU Mainz,
Germany<br>
Email: <a href="mailto:aggraef@gmail.com"
target="_blank" moz-do-not-send="true">aggraef@gmail.com</a>,
web: <a href="https://agraef.github.io/"
target="_blank" moz-do-not-send="true">https://agraef.github.io/</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
<fieldset></fieldset>
<pre>_______________________________________________
L2Ork-dev mailing list
<a href="mailto:L2Ork-dev@disis.music.vt.edu" target="_blank" moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a>
<a href="https://disis.music.vt.edu/listinfo/l2ork-dev" target="_blank" moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a></pre>
</blockquote>
<br>
</div>
_______________________________________________<br>
L2Ork-dev mailing list<br>
<a href="mailto:L2Ork-dev@disis.music.vt.edu" target="_blank"
moz-do-not-send="true">L2Ork-dev@disis.music.vt.edu</a><br>
<a href="https://disis.music.vt.edu/listinfo/l2ork-dev"
rel="noreferrer" target="_blank" moz-do-not-send="true">https://disis.music.vt.edu/listinfo/l2ork-dev</a></blockquote>
</div>
<br clear="all">
<br>
-- <br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">Dr. Albert Gr"af<br>
Computer Music Research Group, JGU Mainz, Germany<br>
Email: <a href="mailto:aggraef@gmail.com"
target="_blank" moz-do-not-send="true">aggraef@gmail.com</a>,
web: <a href="https://agraef.github.io/"
target="_blank" moz-do-not-send="true">https://agraef.github.io/</a></div>
</div>
</div>
</div>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
L2Ork-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:L2Ork-dev@disis.music.vt.edu">L2Ork-dev@disis.music.vt.edu</a>
<a class="moz-txt-link-freetext" href="https://disis.music.vt.edu/listinfo/l2ork-dev">https://disis.music.vt.edu/listinfo/l2ork-dev</a></pre>
</blockquote>
<br>
</body>
</html>