Indeed, but here the issue is actually opposite: you *don't* want the GC to know about the audio-thread.


On 04.12.2011 18:05, Sean Kelly wrote:
You can make the GC know about any thread you want. Look at thread_attachThis 
and related routines in core.thread.

Sent from my iPhone

On Dec 4, 2011, at 5:08 AM, Norbert Nemec<norb...@nemec-online.de>  wrote:

On 04.12.2011 09:10, Marco Leise wrote:
Am 03.12.2011, 19:47 Uhr, schrieb Andrej Mitrovic
<andrej.mitrov...@gmail.com>:

On 12/3/11, Marco Leise<marco.le...@gmx.de>  wrote:
Am 03.12.2011, 19:05 Uhr, schrieb Andrej Mitrovic
<andrej.mitrov...@gmail.com>:

+1 on interest on having this. Back when I was attempting to port VST
to D I got asked by a Steinberg dev how I can guarantee that D plugins
will work. But I couldn't guarantee it, if a GC collection were to run
the plugin would freeze, the host would crash, and the host company
would likely get the blame.

You'll get some angry comments on this one by others. I'll lean back and
enjoy the show :D


I don't follow..?

Hmm, and no one commented either. I thought someone would jump in and
say that you could disable the GC and that malloc isn't realtime either
and for that reason the host application should not crash when a plugin
doesn't deliver in time. The audio should stutter and that's it. So: no
realtime guarantees whatsoever on consumer OSs, but a high probability
that it will just work.

Indeed, malloc is not real-time safe. It is common wisdom that real-time audio 
code should not handle any memory allocations.

To this point, D is just as safe as C++: don't do any operations that may 
allocate memory in the audio thread, so the GC will never be invoked in 
real-time critical code.

Where it gets more involved, though, is that D garbage collection is not thread 
safe. When it starts, all registered threads are stopped.

Note: the audio-thread is typically created externally with special settings, 
so D will not know about it and the GC will not stop it. As long as the 
audio-thread never does any pointer assignments that are relevant to the GC, 
everything should be safe.

Just make sure that any garbage collected objects that the audio thread 
accesses have live pointer from areas that the GC knows about. That way it will 
not matter whether the GC scans the audio-data or not or whether this data is 
modified by the audio-thread while the GC is scanning it.

Reply via email to